jsonp是一种技术手段而不是一种协议,也不是json数据。
var jsonp_callback = function(responseData){
console.log(responseData);
};
这是js部分
同样使用 iframe或者来访问
php端代码
header('text/html;charset=utf-8');
$clientCallback = isset($_GET['callback'])?$_GET['callback']:'';
$data = array(
'name'=>'zhangsan',
'gender'=>'male',
'age'=>20
);
//注意,一定要输出到页面
echo $clientCallback.'('.json_encode($data).')';
?>
测试一下
--------------------------------------------------------------------------------------------
以上方法属于直接访问的跨域通信,而在一些应用程序中,使用ajax+jsonp的进行跨域通信.
$(document).ready(function(){
$.ajax({
url:'http://192.168.121.15/test_json.php',
dataType:"jsonp",
jsonp:"jsonpcallback",
success:function(data){
console.log(data);
},
error:function(data){
console.log(data);
},
headers: { //这里的headers是非必须的,可以去掉
"Access-Control-Allow-Origin":"http://www.example.com",
"Access-Control-Allow-Headers":"X-Requested-With",
'referece':' //设置足迹
'Connection':'keep-Alive' //使用http_1.1
}
});
});
这里的ajax中使用了jsonp通信,需要设置数据类型 dataType=jsonp,jsonp的回调函数名称 jsonpcallback,注意,在js中不需要实现jsonpcallback,在jquery中会直接将 success:function(data){...}赋值给jsonpcallback,关于实现代码如下
//模拟一下哦,其中settings是xhr对象的配置参数
var _callback = settings.success;
url = 'http://192.168.121.15/test_json.php'+'?'+settings.jsonp+'=_callback';
赶快试试吧