$.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);
從上面的返回值看,瀏覽器會進(jìn)入error。
這是什么原因?qū)е碌哪兀?/p>
我們上面增加了jsonp:"callback", jsonpCallback:"success_jsonpCallback",傳遞這兩個(gè)參數(shù)是有原因的,jsonp的返回?cái)?shù)據(jù)格式應(yīng)該是: “客戶端傳遞的回調(diào)方法名稱(json數(shù)據(jù))”,那么后臺代碼也需要作出相應(yīng)的改變:
<?php $arr = array ('name'=>'張三'); echo $_GET['callback']."(".json_encode($arr).")"; ?>
可以看到,php文件返回的結(jié)果是 success_callback({"name","\u5f20\u4e09"}) ,這才是正確的jsonp返回格式,而success_callback這是傳遞過去的參數(shù)。
第二種
一個(gè)專門用來解決跨域問題的jQuery插件-jquery-jsonp。
使用方法也很簡單。
首先肯定是引入這個(gè)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).")"; ?>
更多建議: