亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js跨域請求數(shù)據(jù)的3種常用的方法

 更新時間:2015年12月01日 09:18:26   作者:我的頭很光  
這篇文章主要介紹了js跨域請求數(shù)據(jù)的3種常用的方法,需要的朋友可以參考下

由于js同源策略的影響,當(dāng)在某一域名下請求其他域名,或者同一域名,不同端口下的url時,就會變成不被允許的跨域請求。
那這個時候通常怎么解決呢,對此菜鳥光頭我稍作了整理:
1.JavaScript
   在原生js(沒有jQuery和ajax支持)的情況下,通??蛻舳舜a是這樣的(我假設(shè)是在localhost:8080的端口下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html頁面的body標(biāo)簽下面加入以下代碼):

<script>
  var xhr = new XMLHttpRequest();
  xhr.open("get", "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js", true);
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
      console.log(xhr.responseText);
    }
  };
  xhr.send(null);
</script>

保存,瀏覽器打開http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html,并且打開console控制臺:


瀏覽器很無情的給你彈出一個同源限制的錯誤,意思就是你無法跨域請求url的數(shù)據(jù)。
那么,我先采取第一種策略,運(yùn)用html中的script標(biāo)簽,插入js腳本:
(1)通過script標(biāo)簽引用,寫死你需要的src的url地址,比如:

<script>
var callbackfunction = function(data) {
  console.log('我是跨域請求來的數(shù)據(jù)-->' + data.name);
};
</script>
<script src="http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction"></script> 

這里我定義一個callbackfunction的函數(shù),然后用script標(biāo)簽的src屬性跨域請求數(shù)據(jù),那么,test.js的內(nèi)容經(jīng)過約定,需要寫成這樣:
callbackfunction({"name":"wwwwwwwwwwww"});
保存,打開index.html并刷新:


(2)你也可以動態(tài)的加入script標(biāo)簽,讓html解析的時候,動態(tài)的加載script腳本,并請求遠(yuǎn)端數(shù)據(jù):

<script>
var callbackfunction = function(data) {
  console.log('我是跨域請求來的數(shù)據(jù)-->' + data.name);
};
var script = document.createElement('script'),
  body = document.getElementsByTagName('body');

script.src = 'http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction';
body[0].appendChild(script);
</script>

結(jié)果和上面一樣。

 

2.jQuery中的$.ajax()

   設(shè)想,當(dāng)你想要使用jQuery請求跨域數(shù)據(jù)的時候,比如(還是剛才的index.html):

<script src="js/jquery-1.11.3.js"></script>
<script>
$(function(){
  $.get('http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js',function(data){
    console.log(data);
  })
})
</script>

瀏覽器還是無情的報錯,因為你這個url是不同的域名下的。

那么既然jQuery封裝了ajax方法,我們?yōu)楹尾挥?,人家封裝好了,你不用,豈不是找罪受么,代碼如下:

<script src="js/jquery-1.11.3.js"></script>
<script>
$(function(){
  $.ajax({
    async: false,
    type: "GET",
    dataType: 'jsonp',
    jsonp: 'callback',
    jsonpCallback: 'callbackfunction',
    url: "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js",
    data: "",
    timeout: 3000,
    contentType: "application/json;utf-8",
    success: function(msg) {
      console.log(msg);
    }
  });
})
</script>

當(dāng)你作了這么多挑逗工作之后,瀏覽器很爽快的給出了反應(yīng),表示它很爽,返回給了你一個對象,里面是遠(yuǎn)端不同域名下test.js中的數(shù)據(jù)。
3.postMessage+iframe

   postMessage是HTML5中新增加的功能,比如我在本地域名下,http://192.168.1.152:8080/webs/i.mediapower.mobi/wutao/testa.html中的testa.html中:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>testa</title>
</head>
<script>
window.onload = function() {
  document.getElementById('ifr').contentWindow.postMessage('我是要經(jīng)過傳遞的數(shù)據(jù)', 'http://i2.mediapower.mobi/adpower/vm/Bora/testb.html');
};
</script>
<body>
  <iframe id="ifr" src="http://i2.mediapower.mobi/adpower/vm/Bora/testb.html"></iframe>
</body>
</html>

此時,我遠(yuǎn)端的testb.html里面的內(nèi)容應(yīng)該是這樣:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>testb</title>
</head>
<script>
window.addEventListener('message', function(event) {
  // 通過origin屬性判斷消息來源地址
  if (event.origin === 'http://192.168.1.152:8080') {
    alert(event.data); 
  }
}, false);
</script>
<body>
123
</body>
</html>

保存代碼,打開本地testa.html,訪問遠(yuǎn)端的testb.html


總結(jié)了一下,jQuery還是非常的好用的,基本上js能干的事情,jQuery都能非??焖俨⑶腋咝У耐瓿?,當(dāng)然,原生js也能解決很多事情,而HTML5的新功能也非常強(qiáng)大,這幾種方法,我還是首推jQuery。

以上就是為大家分享的3種常用的js跨域請求數(shù)據(jù)的方法,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • js 將線性數(shù)據(jù)轉(zhuǎn)為樹形的示例代碼

    js 將線性數(shù)據(jù)轉(zhuǎn)為樹形的示例代碼

    這篇文章主要介紹了js 將線性數(shù)據(jù)轉(zhuǎn)為樹形的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JavaScript實(shí)現(xiàn)二維坐標(biāo)點(diǎn)排序效果

    JavaScript實(shí)現(xiàn)二維坐標(biāo)點(diǎn)排序效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)二維坐標(biāo)點(diǎn)排序效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • JS?連接MQTT的使用方法

    JS?連接MQTT的使用方法

    這篇文章主要介紹了JS?連接MQTT的使用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • JS中offset和勻速動畫詳解

    JS中offset和勻速動畫詳解

    這篇文章主要介紹了JavaScript動畫:offset和勻速動畫詳解(含輪播圖的實(shí)現(xiàn)),并把實(shí)現(xiàn)代碼做了分享,有興趣的朋友參考下。
    2018-02-02
  • JavaScript 編程引入命名空間的方法與代碼

    JavaScript 編程引入命名空間的方法與代碼

    JavaScript 編程引入命名空間的方法與代碼...
    2007-08-08
  • JavaScript知識點(diǎn)總結(jié)(十一)之js中的Object類詳解

    JavaScript知識點(diǎn)總結(jié)(十一)之js中的Object類詳解

    這篇文章主要介紹了JavaScript知識點(diǎn)總結(jié)(十一)之js中的Object類詳解的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 一文詳解JS中的塊級作用域

    一文詳解JS中的塊級作用域

    在JavaScript的世界里,作用域可以分為三種,分別是全局作用域,函數(shù)作用域,塊級作用域,本文主要來和大家聊聊JS中塊級作用域的相關(guān)知識,感興趣的可以了解下
    2023-09-09
  • js自制圖片放大鏡功能

    js自制圖片放大鏡功能

    這篇文章主要為大家詳細(xì)介紹了js自制圖片放大鏡功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • javascript canvas實(shí)現(xiàn)簡易時鐘例子

    javascript canvas實(shí)現(xiàn)簡易時鐘例子

    這篇文章主要為大家詳細(xì)介紹了javascript canvas實(shí)現(xiàn)簡易時鐘例子,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 微信小程序?qū)崿F(xiàn)分類菜單激活狀態(tài)隨列表滾動而自動切換效果詳解

    微信小程序?qū)崿F(xiàn)分類菜單激活狀態(tài)隨列表滾動而自動切換效果詳解

    這篇文章主要介紹了微信小程序分類菜單激活狀態(tài)跟隨列表滾動自動切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01

最新評論