網上看了很多關于jsonp的資料,發現在本機運行后實現不了,有的是有錯漏,有的是說的比較含糊,接合自己的情況,整了一個可運行的示例;
前言:
ajax請求地址:http://192.168.1.102:8080/carop/jsonp
服務端要返回的jsonp字符串:jsonpCallback({"name":"劉德華","電話":"17688888888"})
jsonp寫法,寫法上可以理解成一個javascript函數的執行,例如alert("hello world")會彈出hello world的窗口,再例如alert({"name":"劉德華"})會彈出[object Object]的窗口。(注意這里參數兩端沒加雙引號,它是一個有屬性的對象而不是一個字符串)
那么本示例的jsonp中,可以將jsonpCallback理解成函數名,{"name":"劉德華","電話":"17688888888"}這個對象是這個函數執行時所要傳遞的參數。
客戶端:
$.ajax({ type: "get", async:false,url: "http://192.168.1.102:8080/carop/jsonp", dataType: "jsonp",jsonpCallback:"jsonpCallback", success: function(data){ alert(data.name+"/n "+data.tel); } });
其他的ajax方法比如getjson亦可,寫法上有區別,這里僅采用一種方法。
說明:jsonpCallback:"jsonpCallback",前一個ajax參數表示要執行的函數,后面的”jsonpCallback“,這個是服務器返回jsonp的javascript函數名。(網上有相關資料這個參數寫的是jsonp而不是jsonpCallback,經實際測試要寫成jsonpCallback,jquery版本1.8,所測試瀏覽器為火狐和edge)
服務端
servlet控制器層直接返回jsonp;
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/jsonp")public class jsonp extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("UTF-8"); //System.out.println("進入jsonp"); resp.setContentType("text/json;charset=utf-8"); String json="{/"name/":/"劉德華/",/"tel/":/"17688888888/"}"; String jsonp="jsonpCallback("+json+")"; PrintWriter pw=resp.getWriter(); System.out.println(jsonp); pw.print(jsonp);}@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req, resp); }}
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!
新聞熱點
疑難解答