詳解Ajax跨域(jsonp) 調用JAVA后臺
1. JSONP定義
JSONP是英文JSON with Padding的縮寫,是一個非官方的協(xié)議。它允許在服務器端生成script tags返回至客戶端,通過javascript callback的形式來實現(xiàn)站點訪問。 JSONP是一種script tag的注入,將server返回的response添加到頁面實現(xiàn)特定功能。
2.JSONP由來
要解釋JSONP的來由,先要說一下瀏覽器的“同源策略(SOP:Same Origin Policy)”。 簡而言之,就是瀏覽器限制腳本程序只能和同協(xié)議、同域名、同端口的腳本進行交互,這包括共享和傳遞變量等。cookie的傳遞也是遵從同樣策略。這就造成一些涉及到多個服務器的應用在整合時一些麻煩??缬蛟L問的問題造成A站點的Ajax代碼無法訪問B站點的數(shù)據。
如何解決跨域訪問呢?那就要借助瀏覽器的一個特性:盡管瀏覽器不允許頁面中的腳本程序跨域讀取數(shù)據,但卻允許HTML引用跨域的資源,如圖片,CSS和腳本程序。對于腳本程序的引用比較特殊,它被瀏覽器解析以后,就和本地的腳本程序別無二致且可立即進行解釋并執(zhí)行。如在B站點的一個js文件,一個簡單的提示框:alert(“This is Victor!”);。在A站點引用這個js,這個腳本就會在B站點的應用中執(zhí)行,顯示一個alert信息。由于站外腳本的引用是通過script tag來實現(xiàn)的,而腳本程序又可通過DOM的方式可以對HTML頁面的所有標簽進行控制(包括動態(tài)的創(chuàng)建script標簽),這就可以實現(xiàn)通過調用站外程序對本地資源進行更改了。另外,通過<script> 標記的使用,就可從服務端直接返回可執(zhí)行的JavaScript函數(shù)調用或者JSON數(shù)據。
3. JSONP原理與實現(xiàn)
首先在客戶端注冊一個callback, 然后把callback的名字傳給服務器。此時,服務器先生成 JSON數(shù)據。然后以JavaScript 語法的方式,生成一個function, function名字就是傳遞上來的參數(shù)jsonp.
然后,將JSON數(shù)據直接以入參的方式,放置到function中,這樣就生成了一段 js 語法的文檔,返回給客戶端。
最后,在客戶端瀏覽器中解析script標簽,并執(zhí)行返回的JavaScript文檔,此時數(shù)據作為參數(shù),傳入到了客戶端預先定義好的回調函數(shù)里(動態(tài)執(zhí)行回調函數(shù)) 。
具體代碼操作:
1,js代碼
$.ajax({ url: 'http://192.168.3.49:8080/PORTAL/authCode', type: 'post', dataType:'jsonp', jsonp: "callback", data: { "type":'0', "mobilePhone": $("#tel").val() }, success:function(data){ alert(data.ret) settime(obj); }, error:function(data){ $('#mstr_ck').html("獲取驗證碼失敗,請重試!"); $("#error_ck").show(); } });
2,java代碼
@RequestMapping(value = "authCode") @ResponseBody public String getMobileAuthCode( HttpServletRequest request, String callback) throws Exception { String result = "{'ret':'true'}"; //加上返回參數(shù) result=callback+"("+result+")"; return result; }
如上:前端調用結果彈出:alert('true')
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
js+ajax處理java后臺返回的json對象循環(huán)創(chuàng)建到表格的方法
這篇文章主要介紹了js+ajax處理java后臺返回的json對象循環(huán)創(chuàng)建到表格的方法,涉及javascript操作json對象動態(tài)創(chuàng)建表格以及基于ajax與后臺交互的相關技巧,需要的朋友可以參考下2016-08-08多ajax請求的各類解決方案(同步, 隊列, cancel請求)
ajax帶來很好的用戶體驗,于是一個稍微注重web系統(tǒng)使用ajax基本成為必然。當傳統(tǒng)功能型web項目向用戶體驗型項目轉變時,層出不窮的需求就來了。正如本篇所介紹的就是一個多個AJAX請求的情況下,如何利用jquery來處理幾種case2012-03-03