JQuery的Ajax請求跨域問題

2018-06-19 15:50 更新
      在開發(fā)中,當(dāng)我們使用JQuery的ajax(異步)請求時(shí),難免會遇到跨域問題,下面,我總結(jié)了兩種解決方法(這里以php為例)

第一種

$.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).")"; ?>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號