php的jsonp跨域调用

使用jq的getJSON方法调用跨域脚本;注册匿名回调函数 

html:

$.getJSON("http://linweb.applinzi.com/php/jsonp/test.php?callback=?", function(data){  
	$(document.body).append("
getJSON ok!" + data.reqUrl); });

服务端代码:

echo "var reqUrl = \"" . $_SERVER["REQUEST_URI"] . "\";";  
echo $_GET["callback"] . "({\"reqUrl\": reqUrl });";  

如果期间需要传递参数,则直接到链接地址后面加就可以了,下面就多传了一个name的参数

html:

$.getJSON("http://linweb.applinzi.com/php/jsonp/test2.php?name=linjiang&callback=?",function(data){  
     alert(data.name);  
});

服务端:

header('Content-type: application/json');  
//获取回调函数名  
$callback = $_GET ['callback'];  
$value = $_GET['name'];  
setcookie('name', $value, time()+3600*24*30, '/','.eetopin.com', $_SERVER['SERVER_PORT']==443?1:0);  
$json = "{\"name\":\"add cookie success $callback $value\"}";  
echo $callback . "(" . $json . ")";  

在ajax请求时,dataType:'jsonp',与jsonp:'linjiang_callback',这两个参数是一定要设置的。jsonp的默认值是callback,可以与后台约定一个新的值。

html:

//约定callback
$.ajax({  
	url:"http://linweb.applinzi.com/php/jsonp/test3.php",  
	dataType:'jsonp',  
	data:'',  
	jsonp:'linjiang_callback',
	success:function(result) {   
		console.log(result);
	},  
	timeout:3000  
}); 

服务端:

//服务端返回JSON数据  
$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  
$result=json_encode($arr);
//动态执行回调函数  
if (isset($_GET['linjiang_callback'])) {
	$callback=$_GET['linjiang_callback'];  
	echo $callback."($result)"; 
}else{
	echo '验证失败';
}

结果:

 php的jsonp跨域调用_第1张图片

你可能感兴趣的:(php)