最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解js跨域請求的兩種方式,支持post請求

 更新時間:2018年05月05日 12:45:51   投稿:mdxy-dxy  
原先一直以為要實現(xiàn)跨域請求只能用jsonp,只能支持GET請求,后來了解到使用POST請求也可以實現(xiàn)跨域,但是需要在服務(wù)器增加Access-Control-Allow-Origin和Access-Control-Allow-Headers頭,下面說明下兩個不同的方法實現(xiàn)的方式和原理。

JSONP實現(xiàn)跨域

常用的jquery實現(xiàn)跨域調(diào)用

$.ajax({
  url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php",
  dataType: "jsonp",
  jsonp: "callback",
  context: document.body,
  success: function(data) {
    console.log(data);
  }
});

這個調(diào)用實際上的實現(xiàn)原理是
在網(wǎng)頁中構(gòu)造一個script標簽,將src設(shè)置為對應(yīng)的url,并增加上相應(yīng)的callback參數(shù),形如如下格式:

<script src="http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php?callback=jQuery211018970995225637144_1465350372062&_=1465350372063"></script>

請求的服務(wù)端代碼如下:

$data   = json_encode(array("id" => "1", "name" => "tom"));
$callback = $_GET["callback"];
echo $callback . "(" . $data . ")";

實際上最后返回的內(nèi)容就是一段js代碼:

jQuery211018970995225637144_1465350372062({"id":"1","name":"tom"})

當瀏覽器獲取到該段js代碼后就會執(zhí)行這個函數(shù),從而實現(xiàn)回調(diào)ajax請求時設(shè)置的success方法。

jsonp實現(xiàn)的缺點

了解了原理后,就知道jsonp實現(xiàn)的跨域方式不支持post請求,只能支持get請求。但是如果需要支持post請求該怎么辦呢?下面談下服務(wù)器端設(shè)置的方式。

服務(wù)端設(shè)置支持跨域

主要是Access-Control-Allow-Origin頭參數(shù),該參數(shù)用來指定允許哪個來源的域請求。服務(wù)端代碼如下:

// 表示支持所有來源的域進行請求
// 實際在操作過程中可以設(shè)置為指定域
header('Access-Control-Allow-Origin:*');
$data = json_encode(array("id" => "1", "name" => "tom"));
echo $data;

對應(yīng)的js代碼:

$.ajax({
  type: "POST",
  url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/header.php",
  dataType: "json",
  success: function(data) {
    console.log(data);
  }
});

可以支持post請求。

小結(jié)

實際上個人并不是特別喜歡用跨域請求的方式,可能會帶來一些不可預(yù)見的安全問題。比較習(xí)慣的方式通過本域下的服務(wù)端和跨域的源服務(wù)器進行交互。

相關(guān)文章

  • 微信小程序sessionid不一致問題解決

    微信小程序sessionid不一致問題解決

    這篇文章主要介紹了微信小程序sessionid不一致問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • js取滾動條的尺寸的函數(shù)代碼

    js取滾動條的尺寸的函數(shù)代碼

    js取滾動條的尺寸的函數(shù)代碼,需要的朋友可以參考下。
    2011-11-11
  • JS setCapture 區(qū)域外事件捕捉

    JS setCapture 區(qū)域外事件捕捉

    鼠標捕獲(setCapture)作用是將鼠標事件捕獲到當前文檔的指定的對象。這個對象會為當前應(yīng)用程序或整個系統(tǒng)接收所有鼠標事件。
    2010-03-03
  • JS模仿手機端九宮格登錄功能實現(xiàn)代碼

    JS模仿手機端九宮格登錄功能實現(xiàn)代碼

    這篇文章主要介紹了JS模仿手機端九宮格登錄功能實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • JavaScript中你不知道的Object.entries用法

    JavaScript中你不知道的Object.entries用法

    大家應(yīng)該都知道,Object.entries()方法返回一個給定對象自身可枚舉屬性的鍵值對數(shù)組,其排列與使用 for...in 循環(huán)遍歷該對象時返回的順序一致,這篇文章主要給大家介紹了關(guān)于JavaScript中你不知道的Object.entries用法的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • js字符編碼函數(shù)區(qū)別分析

    js字符編碼函數(shù)區(qū)別分析

    js對文字編碼有3個函數(shù): escape,encodeURI,encodeURIComponent, 對應(yīng)的解碼函數(shù):unescape,decodeURI,decodeURIComponent
    2011-12-12
  • event.keyCode鍵碼值表 附只能輸入特定的字符串代碼

    event.keyCode鍵碼值表 附只能輸入特定的字符串代碼

    非常不錯的應(yīng)用,讓文本框里只能輸入money大家看下具體的實現(xiàn)代碼,真是只有想到,原理很簡單。
    2009-05-05
  • 在chrome中window.onload事件的一些問題

    在chrome中window.onload事件的一些問題

    在寫一些關(guān)于圖片操作的代碼的時候,一般都需要在圖片加載完成之后再執(zhí)行程序。然而在Chorme中(貌似Safari也是)對window.onload的理解與IE和FF有偏差。
    2010-03-03
  • 簡單JS代碼壓縮器

    簡單JS代碼壓縮器

    簡單JS代碼壓縮器...
    2006-10-10
  • echarts大屏字體自適應(yīng)的方法步驟

    echarts大屏字體自適應(yīng)的方法步驟

    這篇文章主要介紹了echarts大屏字體自適應(yīng)的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評論

肃南| 平舆县| 博野县| 营口市| 秦皇岛市| 双城市| 涿鹿县| 叶城县| 探索| 万载县| 中阳县| 温宿县| 宁都县| 米脂县| 桃源县| 宜丰县| 泾川县| 来凤县| 乌兰察布市| 石泉县| 安国市| 宝山区| 赣州市| 邵武市| 江北区| 仁寿县| 屏东市| 乃东县| 罗江县| 连平县| 富阳市| 闻喜县| 丘北县| 千阳县| 汕尾市| 靖宇县| 洛浦县| 建瓯市| 谢通门县| 柳州市| 军事|