跨域&JSONP
? ? ? ? ? ? ? ? ?
<img href="http://api.douban.com/v2/movie/top250" alt=""> 此时可以看到能正确收到响应,但拿不到响应体(返回的JSON数据),如图:
<link rel="stylesheet" src="http://api.douban.com/v2/movie/top250" ?
1 <script> 2 function test(json) { 3 console.log(‘我被调用了‘); 4 console.log(json); 5 } 6 </script> 7 <script src="http://api.douban.com/v2/movie/top250?callback=test"></script> 结果如下图 ?说明:我们可以看到,我们预先定义了一个函数叫test,再然后在src里加了一个参数callback=test,可以发现,当请求完成,会自动调用test这个函数,并且把响应体(JSON数据)当做参数传递过来
alert(‘你好‘); <script src="1.txt"></script> 结果: 结论:script导入文件会默认把文件内容当JS代码执行,跟文件格式无关 1 <script> 2 //声明一个success函数 3 function success(obj){ 4 console.log(obj); 5 } 6 </script> 7 <!-- script导入文件 --> 8 <script src="http://www.demo.com/top250.php"></script> echo "success(‘hello‘)";
结果 说明:请求的top250文件里,服务器最终返回的是 success(‘hello‘); 这个当JS代码执行时,是调用函数并传递参数hello的语法,因此可以看到success函数被调用,并且打印了参数hello 图解:
1 $data = array(‘name‘ => ‘jack‘,‘age‘=>16,‘gender‘=>‘true‘ ); 2 3 $json = json_encode($data); 4 5 echo "success({$json})";
1 <script> 2 //声明函数 3 function myFunc(obj){ 4 console.log(obj); 5 } 6 </script> 7 8 <!-- 请求数据,并加入callback参数,值为myFunc --> 9 <script src="http://www.demo.com/top250.php?callback=myFunc"></script> 1 <?php 2 3 //拿到传递过来的参数,即函数名 4 $funcName = $_GET[‘callback‘]; 5 6 //准备数据 7 $data = array(‘name‘ => ‘jack‘,‘gender‘=>true ); 8 9 //转化为JSON 10 $json = json_encode($data); 11 12 //传过来的是什么函数名,就调用什么函数 13 echo "$funcName($json)"; 14 ?>
这就是之前跨域拿数据的原理,即服务器端调用浏览器端的函数,把参数传递过来即可
// 允许远端访问 header(‘Access-Control-Allow-Origin: *‘);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |