jQuery實現跨域請求


我們都知道,xhr(XMLHttpRequest)是不允許跨域的。而jQuery的ajax方法是基於xhr的,所以,直接使用它也是無法跨域的。一般的,我們是如下使用$.ajax方法的:

$.ajax({
  type : "GET",
  url : "the path of server",
  dataType : "json",
  success : function(res) {
      //這里寫獲取相應數據的代碼
  }
});

我們這樣調用的話,就是xhr請求。如果要實現跨域的話,就必須要使用動態腳本注入的技術。當然了,什么是動態腳本注入技術在這里我就不說了,有興趣的可以自己去搜一下。jQuery已經幫我們封裝好了jsonp的請求方法,我們直接調用它就行了,不必要知道他的底層是怎么實現的。jsonp請求的代碼如下,只需要把dataType: "json"改成dataType: "jsonp"就行了:

$.ajax({
  type : "GET",
  url : "http://zhangzhanyu.nfreehost.com/jsonp.php",
  dataType : "jsonp",
  success : function(json) {
    alert(json.msg);
  }
});
 
但是,直接這樣子還不行的,需要注意的是, 跨域是要前端和后端配合才可以完成的。我們上面只是完成了前端的部分。因此,我們請求的php文件的代碼要寫成如下格式:
<?php
    $callback = $_GET['callback' ];
    echo "{$callback}({'msg':'this is a jquery jsonp test message!'})";
?>

我們會發現,如果我們使用jsonp請求的話,會把一個名為callback的參數也傳過來了,我們后台需要獲取到這個參數值(事實他的值是一個函數名),然后再把需要返回到前端的數據放到這個callback里面當做參數就行了。

ps:由於做前端的本地不一定都有php環境,不方便測試。所以我把這個測試的php文件上傳到了服務器,地址是http://zhangzhanyu.nfreehost.com/jsonp.php。需要測試的,可以直接把ajax方法里的url設置成這個地址就行了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM