在php中使用jsonp跨域请求

来源:互联网 发布:mac sql 可视化工具 编辑:程序博客网 时间:2024/05/29 12:56

jsonp数据类型有着很大的重要性

事例:

两个网站A,和B,其中B通过jsonp接口向外提供职位查询功能,A网站通过该jsonp接口向B发起职位查询数据。

案例效果如下图:

首先创建一个查询表单页面,即search.html

代码及注释如下:

[html] view plain copy
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>职位查询</title>  
  6.     <script src="jquery.js"></script>  
  7. </head>  
  8. <body>  
  9. <center><br><br>  
  10. <input type="text" id="val" ><input type="button" id="dian" value="查询"><br><br>  
  11.   
  12. <div id="list" style="width:300px;border:1px #000 solid;height:200px"></div></center>  
  13.     <script>  
  14.     var url='http://www.nine.com/invite/frontend/web/index.php?r=index/jsonp';//接口路径  
  15.     //var url='jsonp.php';  
  16.     $("#dian").click(function(){  
  17.   
  18.         var zhi=$("#val").val();  
  19.         var data={zhi:zhi};//搜索值  
  20.   
  21.         $.get(url,data,function(msg){  
  22.             //console.log(msg);  
  23.             //alert(msg[0].p_name);  
  24.             var html='职位:';  
  25.             for (var i in msg) {  
  26.                 //将接到的jsonp数据进行遍历  
  27.                 html+='<br /> '+msg[i].p_name;  
  28.             };  
  29.             $('#list').append(html);  
  30.         },'jsonp')//指定数据为jsonp  
  31.     })  
  32.     //下面的方法也可以 为原生的ajax方法  
  33.     /*$("#dian").click(function () {  
  34.         var zhi=$("#val").val();  
  35.         $.ajax({  
  36.             url: url,  
  37.             data:'zhi='+zhi,  
  38.             dataType: "jsonp",  
  39.             jsonpCallback: "aa",  
  40.             success: function (msg) {  
  41.                 //console.log(data)  
  42.                 $('#list').append('职位:'+msg[0].p_name);  
  43.             }  
  44.         })  
  45.     })*/  
  46.     </script>  
  47. </body>  
  48. </html>  

然后,创建一个接口,我的接口是在yii2架构中做的,当然用原生的也可以,怎么方便怎么来,

代码,我只用到一个方法,想用的可根据详情改变,

代码如下:

[html] view plain copy
  1. //jsonp 接口 查询职位  
  2.     public function actionJsonp()  
  3.     {  
  4.         header("Access-Control-Allow-Origin: *");//同源策略 跨域请求 头设置  
  5.         header('content-type:text/html;charset=utf8 ');  
  6.         //获取回调函数名  
  7.         $jsoncallback = htmlspecialchars($_REQUEST['callback']);//把预定义的字符转换为 HTML 实体。  
  8.   
  9.         $zhi = htmlspecialchars($_REQUEST['zhi']);  
  10.           
  11.         $arr=yii::$app->db->createCommand("select * from position where p_name like :name",array(':name'=>"%$zhi%"))->queryAll();//用的like进行模糊查询  
  12.   
  13.         $json_data=json_encode($arr);//转换为json数据  
  14.   
  15.         //输出jsonp格式的数据  
  16.         echo $jsoncallback . "(" . $json_data . ")";  
  17.     } 
0 0
原创粉丝点击