因为跨域的存在,使资本交互在差别域名间变的庞杂和平安。关于跨域数据传输,当数据长度较小(get的长度内),jsonp是一种较好的解决方案。
分享一个本身在jsonp使用过程中的demo。
关于跨域能够参考:跨域总结与解决办法
jsonp的js端挪用
主要功能:经由过程jsonp向服务器,挪用响应接口,获应数据;依据猎取数据效果做出响应回调。
/**
* jsonp demo
* 经由过程回调函数,举行猎取以后的事宜加载
*
* @author:cuihuan
* @private
*/
_jsonpDemo:function(callback){
$.ajax({
url: "http://your_site_url",
type: 'GET',
dataType: 'JSONP',
success: function (data) {
if (data && data.status) {
if (data.status == "0") {
// failure solve
...
} else if (data.status == 500) {
// server error log
_sendInternalLog(data.info);
} else if (data.status == 1) {
//success solve
...
}
// callback func
(callback && typeof(callback) === "function" ) && callback();
}
},
error: function () {
_sendFailLog();
}
})
}
jsonp 服务器端 (php)
/**
* 接口返回响应数据
*
* status: 0 标示失利,1标示胜利,500发作毛病
* return: jsonp
*/
public function actionGetJsonPInfo()
{
try {
$data = getNeedData()
if ($data['status'] == "success") {
$res = array("status" => "1", 'info' => $data['info']);
}else{
$res = array("status" => "0", 'info' => '0');
}
}catch (Exception $e){
$res = array("status" => "500", 'info'=> $e);
}
// jsonp 经由过程get要求的返回数据情势
if (isset ($_GET['callback'])) {
header("Content-Type: application/json");
echo $_GET['callback']."(".json_encode($res).")";
}
}
总结
现在来讲,数据量小的跨域传输,jsonp是一种很好的解决方案。
jsonp在data中能够自动识别,res.status,res.info等状况位,比较轻易。
php端的接收代码最好不要采纳 Access-Control-Allow-Origin:* 风险太大。