Ajax跨域的完美解決方案執行個體分享

來源:互聯網
上載者:User
公司要做一個活動頁面,在其過程中發現所有的介面,ajax請求跨域。這裡對跨域做個簡單介紹以及提供幾種解決辦法。

  由於瀏覽器實現的同源策略的限制,XmlHttpRequest只允許請求當前源(網域名稱、協議、連接埠)的資源,所以AJAX是不允許跨域的。這裡提供自己常用的三種方法:

1、jsonp訪問

  JSONP(JSON with Padding)是一個非官方的協議,它允許在伺服器端整合Script tags返回至用戶端,通過javascript callback的形式實現跨域訪問;

實現方式

  1)

<script type="text/javascript">   $.ajax({     url:url,     dataType:'jsonp',     data:'',     jsonp:'callback',     success:function(result) {     },   }); </script>

  2)

$.getJSON(url+"?callback=?",   function(result) {   });

註:1】 jsonp只能用get請求,哪怕你用了post請求,也會自動給你轉換成post;

  2】 jsonp 不僅可以用來擷取資料,也可以用來提交資料。

2、damain 方法

  在主域相同,子域不同的情況下可以用這種方法,修改網域名稱指向,讓他們指向同一網域名稱,這種辦法也只能解決主域相同而次層網域不同的情況,兩個毫無關係的網址是不可以用這種方法的;

document.domain = 'a.com'

註:在實際開發中,很多人會在本地調試介面,localhost的網域名稱和公司的網域名稱完全不一樣,所有用了domain這種辦法也無法產生效果,解決辦法是修改c盤裡的host檔案,把本地地址localhost修改成公司網域名稱或者公司次層網域,然後這種方法就可以使用了。

下面是修改的網域名稱指向:

#127.0.0.1 localhost
127.0.0.1 公司.com

3、postMessage

  postMessage是h5的一個新功能之一,由於我們是一家做h5遊戲的公司,不可避免的要嵌套iframe,方便資料提交等。

  這裡假設,iframe的Id為 ‘iframe';

  在iframe裡面的js裡要寫上

var message = 'date';<br>if (parent.document.getElementById(‘iframe‘)) {          //捕獲iframe          var iframe = parent.document.getElementById(‘iframe').contentWindow;          //發送訊息          parent.postMessage(message, "*");        }

  在iframe外面的js裡要寫上

window.addEventListener('message',function(e){      },false);

  然後就可以拿到message的資料了。

相關推薦:

ajax跨域請求下parsererror的錯誤解決方案

JS實現Ajax跨域請求flask響應內容

執行個體詳解Ajax跨域請求的原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.