jsonp 請求和回傳實現


 

  JSONP最主要的是可以解決跨域問題,不然誰會沒事用這種格式。

  下面是我用JSONP的一些心得體會:

 JSONP是JSON with Padding的略稱。它是一個非官方的協議,它允許在服務器端集成Script tags返回至客戶端,通過javascript callback的形式實現跨域訪問。對,它就是一種協議,不是數據格式,開始我也被

dataType: "jsonp"這個鬼東西誤導了,我們根本不需要考慮格式問題,該返回什么格式就返回什么格式,只要注意幾個地方就可以了:

1. jsonp: "callback",jsonpCallback:"userHandler",這兩個可以自定義也可以不定義,為了可讀性建議還是自定義好。
$.ajax({
           url: "http://172.25.19.63:8084/web/",
           type: "post",
           dataType: "jsonp",
           jsonp: "callback",
           jsonpCallback:"userHandler",
//           contentType: 'application/json',
//           data:JSON.stringify(json),
           data:{password: "password",
               username: "username"},
           success: function(data){
               alert(data.name)//得到”忍着不哭泣“
      },
      error: function(data){
         alert(data.status);//調用狀態
      }
});
2.  在服務器端callback = resquest.getParamter("callback")取到的值是"userHandler",然后如下圖拼裝起來寫入response里面就OK了
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      callback = resquest.getParamter("callback")//取到的值應該是userHandler
      PrintWriter out = response.getWriter();
      String json = {"name":"忍着不哭泣"}
      out.println(callback+"("+json+")"); out.close();
}

3.上圖是json格式字符串(可以其他格式)客戶端就會取到json對象。

 

Jsonp原理: 
首先在客戶端注冊一個callback, 然后把callback的名字傳給服務器。

此時,服務器先生成 json 數據。
然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數 jsonp.

最后將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。

客戶端瀏覽器,解析script標簽,並執行返回的 javascript 文檔,此時數據作為參數,傳入到了客戶端預先定義好的 callback 函數里.(動態執行回調函數)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM