在业务中有需要到跨域的地方,然后简单的学习了一下利用jsonp解决跨域问题:
首先是跨域的原理:因为浏览器的限制,限制不能跨域ajax请求。
方式:首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 json 数据。然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)
简单例子:test.html
<html> <body></body> <script src="jquery.js"></script> <script> function jqueryAjax(){ $.ajax({ type:"GET", data:{data:1}, url:"http://test..../test.php", dataType:"jsonp", jsonp:‘callback‘, success:function(result){ alert(result); } }) } jqueryAjax(); </script> </html>
然后是另一个域下的后台返回参数,使用PHP
1 <?php 2 $callback = isset($_GET[‘callback‘]) ? $_GET[‘callback‘] : ‘‘; 3 $json = ‘‘; 4 5 $arr = array(); 6 $json = json_encode($arr);//转成json数组 7 if (!empty($callback)) { 8 $json = $callback . ‘(‘ . $json . ‘)‘; //注意这里的格式 9 } 10 echo $json; 11 ?>
时间: 2024-11-01 20:15:40