$.ajax({ type:"get", url:"jsonp.php", dataType:"jsonp", jsonp:"callback", jsonpCallback:"success_callback", success:function(data){ $("#word").html(data.name); }, error:function(err){ console.log(err); } });
ajax請求采用了jsonp格式,假如我們后臺代碼還是用原來ajax請求
<?php $name=array('name'=>'張三'); echo json_encode($name);
從上面的返回值看,瀏覽器會進入error。
這是什么原因導致的呢?
我們上面增加了jsonp:"callback", jsonpCallback:"success_jsonpCallback",傳遞這兩個參數(shù)是有原因的,jsonp的返回數(shù)據(jù)格式應該是: “客戶端傳遞的回調方法名稱(json數(shù)據(jù))”,那么后臺代碼也需要作出相應的改變:
<?php $arr = array ('name'=>'張三'); echo $_GET['callback']."(".json_encode($arr).")"; ?>
可以看到,php文件返回的結果是 success_callback({"name","\u5f20\u4e09"}) ,這才是正確的jsonp返回格式,而success_callback這是傳遞過去的參數(shù)。
第二種
一個專門用來解決跨域問題的jQuery插件-jquery-jsonp。
使用方法也很簡單。
首先肯定是引入這個js插件
$.jsonp({ url: url, callback:"success_callback", success: function(data) { $("#word").html(data.name); },
error: function(d,msg) { console.log(err); } });
后臺
<?php $arr = array ('name'=>'張三'); echo $_GET['callback']."(".json_encode($arr).")"; ?>
更多建議: