国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

jsonp跨域實現(xiàn)

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

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

兩點:

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

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

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

demo:

<script>
    function handlerData(data){ alert('獲取到數(shù)據(jù)');
        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

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

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

優(yōu)缺點:

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

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

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

  • 在JavaScript中處理JSON很簡單。

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

JSON也有一些劣勢:

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

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

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

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

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


Release Notes

Popular Entries