首页 > 代码库 > jsonp跨域访问数据

jsonp跨域访问数据

实例一,使用 jquery 的 $.getJSON 方法

 

//前端js :

$("#selId").click(function() {
$.getJSON("http://www.example.com/remote.php?callback=?", // callback=?参数是重点,会传递到后台自动处理
{name: ‘max‘, age: 23, str: ‘hello‘},
function(data) {
console.log(data);
}
);

});

//后端remote.php

$callback = $_REQUEST[‘callback‘]; //前台传递过来的 ? 号,被jquery自动解析为一个函数名
$arr = array(‘name‘=>‘hello‘, ‘age‘=>23, ‘male‘=>‘female‘, ‘str‘=>$_REQUEST[‘str‘]);
$tmp = json_encode($arr);
echo $callback."($tmp)"; //实质上,后台这里只需要返回 “funName({ name: ‘max‘, age: 23 } json数据 )”格式的字符串就行了

 

 

实例二,使用 jquery 的 $.ajax 方法

//前端代码:

$("#selId").click(function() {
$.ajax({
type: "GET",

//asyn 默认为 true,表示使用异步请求;false 表示使用同步请求,同步请求将锁定浏览器,用户其他操作需等待请求完成才可以执行
async: false,
url: "http://www.example.com/remote.php", // 跨域的后台文件,主要是生成字符串;
dataType: "jsonp", //使用 jsonp 方式获取
jsonp: "callback", //用于获得jsonp回调函数名的参数名,一般为 callback 

/**自定义的 jsonp 回调函数名,此时后台返回字符串为 echo“remoteHandler( json )”; 用 ? 的话jquery会随机自动生成,后台代码则为 $callback=$_REQUEST[‘callback‘], echo $callback. jsonStr.

*/
jsonpCallback: "remoteHandler",
success: function(json) {
console.log(json);
},

});

});

 

 

//后台remote.php

$arr = array(‘name‘=>‘hello‘, ‘age‘=>23, ‘male‘=>‘female‘, ‘str‘=>$_REQUEST[‘str‘]);

$tmp = json_encode($arr);
echo "remoteHandler($tmp)"; // remoteHandler 与前台传进来的 jsonpCallback: "remoteHandler" 对应

jsonp跨域访问数据