javascript 跨域请求详细分析
什么是跨域请求
$.getJSON(‘www.BBB.com/index.php‘, funciton(data) { // 后续操作 });
同源策略
什么情况下,我们要绕过浏览器这个限制
file:///E:/BaiduYunPan/www/test.js
如何绕过浏览器这个限制
<html> <script> function test(data) { alert(data); } </script> <script type="text/javascript" src="http://www.BBB.com/test.php"></script> </html>
<?php echo "test(‘this data is from Server B‘)";
当浏览器执行到tes.js文件的时候,会触发test(data)这个函数,也就是说,可以请求到网站B的内容。这样,我们就已经实现了跨域请求数据。这个原理就是 src不受同源策略限制,会获取网站B响应的数据,而且会把这个数据当做JS文件来执行,所以,对于网站A来说,就是执行了test(data)函数。这个实现方式的重点就是网站B响应的数据是网站A中一段可执行的JS文件,这样网站A就可以处理来自网站B的数据了。
ajax自带jsonp属性实现跨域请求
$.ajax({ url:"www.BBB.com/index.php", dataType:"jsonp", jsonpCallback:"person", success:function(data){ alert(data.name + " is a a" + data.sex); } });在网站B中有一个index.php文件:
echo ‘person(‘ . json_encode(array(‘name‘ => ‘sunli‘, ‘age‘ => ‘24‘)) . ‘)‘;这样就可以。
echo $_GET[‘callback‘] . ‘(‘ . json_encode(array(‘name‘ => ‘sunli‘, ‘age‘ => ‘24‘)) . ‘)‘;
(2)我在实现jsonp的时候,没有填写jsonpCallback, 在index.php中也没有加入$_GET[‘calllback‘]这样的函数名,于是就遇到一个很大的错误,网站A依然可以请求到网站B的数据,但是,test.js文件中,success 响应函数没有执行到,我想了半天都没有想到,为什么浏览器成功响应了数据,但是success却没有执行,最后由老大指出了问题,就是我第一点说的,没有指定回调函数,就算数据返回过来了,也不会执行success.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。