91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

發布時間:2020-10-07 01:24:30 來源:腳本之家 閱讀:101 作者:dongxie548 欄目:web開發

由于同源策略的緣故,ajax不能向不同域的網站發出請求。

比如a站localhost需要向b站請求數據,地址為:http://www.walk-sing.com/api.php

請求的代碼如下:

<html> 
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
<script type="text/javascript"> 
 $.get("http://www.walk-sing.com/api.php", function(data){ 
   alert("Data Loaded: " + data); 
  }); 
</script> 
<body> 
</body> 
</html> 

訪問該頁面,頁面空白,按F12打開控制臺,可以看到截圖所示信息:

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

解決方案1:jsonp

我們先來看這樣一個例子:

<html> 
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
<script type="text/javascript"> 
 function alertSomething(data){ 
  alert(data.name+data.age); 
 } 
 alertSomething( 
   {"name":"ben","age":24} 
   ); 
// $.get("http://www.walk-sing.com/api.php", function(data){ 
//  alert("Data Loaded: " + data); 
//  }); 
</script> 
<body> 
</body> 
</html> 

執行結果:

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

我們也可以這樣寫:

<html> 
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
<script type="text/javascript"> 
 function alertSomething(data){ 
  alert(data.name+data.age); 
 }; 
// $.get("http://www.walk-sing.com/api.php", function(data){ 
// alert("Data Loaded: " + data); 
// }); 
</script> 
<script type="text/javascript" src="alertsomething.js"></script> 
<body> 
</body> 
</html> 

alertsomething.js的內容如下:

alertSomething( 
   {"name":"ben","age":24} 
   ); 

也可以得到截圖所示結果。

我們再換一個方式,將alertsomething.js上傳到服務器,將代碼改為如下形式:

<html> 
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
<script type="text/javascript"> 
 function alertSomething(data){ 
  alert(data.name+data.age); 
 }; 
// $.get("http://www.walk-sing.com/api.php", function(data){ 
// alert("Data Loaded: " + data); 
// }); 
</script> 
<script type="text/javascript" src="http://www.walk-sing.com/alertsomething.js"></script> 
<body> 
</body> 
</html> 

也可以得到截圖所示結果。

不知道大家發現沒有,script標簽沒有同源策略的限制,jsonp正是基于此原理實現的。

jsonp的具體實現可參見如下代碼:

jsonp.php

<?php 
$method = isset($_GET['callback']) ? $_GET['callback'] : ''; 
if(!isset($method)){ 
 exit('bad request'); 
} 
$testArr = array( 
 'name' => 'ben', 
 'age' => 23 
); 
echo $method.'('.json_encode($testArr).')'; 

js代碼:

<html> 
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
<script type="text/javascript"> 
 function alertSomething(data){ 
  alert(data.name+data.age); 
 }; 
// $.get("http://www.walk-sing.com/api.php", function(data){ 
// alert("Data Loaded: " + data); 
// }); 
</script> 
<script type="text/javascript" src="http://www.walk-sing.com/jsonp.php?callback=alertSomething"></script> 
<body> 
</body> 
</html> 

也可以得到截圖所示結果。

解決方案二:CORS(跨域資源共享,Cross-Origin Resource Sharing)

不知道大家發現了沒有,jsonp只能發送get請求,而如果業務中需要用到post請求時,jsonp就無能為力了。

這時候cors(跨域資源共享,Cross-Origin Resource Sharing)就派上用處了。

CORS的原理:

CORS定義一種跨域訪問的機制,可以讓AJAX實現跨域訪問。CORS 允許一個域上的網絡應用向另一個域提交跨域 AJAX 請求。實現此功能非常簡單,只需由服務器發送一個響應標頭即可。
就拿前面第一個例子來說,我只要在api.php文件頭加上如下一句話即可:

header('access-control-allow-origin:*'); 

再次請求該接口,結果如下截圖所示:

淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法

以上所述是小編給大家介紹的jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜章县| 毕节市| 通山县| 孙吴县| 永修县| 星子县| 慈溪市| 横山县| 阜阳市| 汉阴县| 定陶县| 绥阳县| 扎囊县| 西乌珠穆沁旗| 龙江县| 沁阳市| 高清| 屏南县| 遂溪县| 县级市| 墨江| 云和县| 始兴县| 会宁县| 上虞市| 临城县| 水城县| 子长县| 巴楚县| 文昌市| 绍兴县| 金坛市| 北京市| 巴林右旗| 随州市| 托克托县| 都安| 屏南县| 华阴市| 安福县| 疏附县|