亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

jsonp跨域實現

原創(chuàng) 2016-11-12 14:18:25 943
摘要:原理:借助script可以跨域的思想,將跨域請求放在script中,當頁面解析到改script標簽時,就會向該src指向的地址發(fā)出一個請求,達到跨域請求的目的。兩點:(1)主要是利用了 <script/>標簽的跨域性 (2)script標簽對javascript文檔的動態(tài)解析來實現服務器端配合處理: 在前端傳入事件處理函數如url?callback=fun,后臺獲取這個cal

原理:借助script可以跨域的思想,將跨域請求放在script中,當頁面解析到改script標簽時,就會向該src指向的地址發(fā)出一個請求,達到跨域請求的目的。

兩點:

(1)主要是利用了 <script/>標簽的跨域性 

(2)script標簽對javascript文檔的動態(tài)解析來實現

服務器端配合處理: 在前端傳入事件處理函數如url?callback=fun,后臺獲取這個callback參數,通過字符串拼接,組合成函數調用的形式,將數據也拼接進去,構造js代碼,返回給前端的script標簽,在前端script標簽會自動執(zhí)行返回的代碼。(因為后臺沒法直接執(zhí)行函數調用),所以是在后臺返回一個拼接的調用形式,返回給前端,script標簽會自動執(zhí)行,從而實現跨域。

demo:

<script>
    function handlerData(data){ alert('獲取到數據');
        console.log(data);  
    }
</script>
<script src='http://webgis.ecnu.edu.cn/beta/cross.php?callback=handlerData'></script>

服務器端:

<?php
$callback = $_GET['callback'];
$data ='["hello","world"]';
echo $callback."(".$data.")";   //拼接字符串   或者 "try" $callback."($data)". "catch(e){}"
?>

結果如下

 604652-20151010213408034-2119097564.png

  這種方法實現的話,每個請求都要重新生成數據,可以采用動態(tài)生成腳本的方式,將數據放到腳本中,腳本中存放數據,向客戶端返回一個js

缺點:返回的函數執(zhí)行出錯時,沒有錯誤提示,只能看控制臺下的報錯信息。

優(yōu)缺點:

使用JSON的優(yōu)點在于:

  • 比XML輕了很多,沒有那么多冗余的東西。

  • JSON也是具有很好的可讀性的,但是通常返回的都是壓縮過后的。不像XML這樣的瀏覽器可以直接顯示,瀏覽器對于JSON的格式化的顯示就需要借助一些插件了。

  • 在JavaScript中處理JSON很簡單。

  • 其他語言例如PHP對于JSON的支持也不錯。

JSON也有一些劣勢:

  • JSON在服務端語言的支持不像XML那么廣泛,不過JSON.org上提供很多語言的庫。

  • 如果你使用eval()來解析的話,會容易出現安全問題。

盡管如此,JSON的優(yōu)點還是很明顯的。他是Ajax數據交互的很理想的數據格式。

第一,也是最重要的一點,沒有關于 JSONP 調用的錯誤處理。如果動態(tài)腳本插入有效,就執(zhí)行調用;如果無效,就靜默失敗。失敗是沒有任何提示的。例如,不能從服務器捕捉到 404 錯誤,也不能取消或重新開始請求。不過,等待一段時間還沒有響應的話,就不用理它了。(未來的 jQuery 版本可能有終止 JSONP 請求的特性)。

JSONP 的另一個主要缺陷是被不信任的服務使用時會很危險。因為 JSONP 服務返回打包在函數調用中的 JSON 響應,而函數調用是由瀏覽器執(zhí)行的,這使宿主 Web 應用程序更容易受到各類攻擊。如果打算使用 JSONP 服務,了解它能造成的威脅非常重要。


發(fā)布手記

熱門詞條