ajax jsonp跨域的方法執行個體方法

來源:互聯網
上載者:User

CORS正好可以解決這個問題。

CORS與JSONP相比,無疑更為先進、方便和可靠。

1、 JSONP只能實現GET請求,而CORS支援所有類型的HTTP請求。

舉個例子,假如需要從伺服器(http://www.a.com/user?id=123)擷取的資料如下:

{"id": 123, "name" : 張三, "age": 17}

那麼,使用JSONP方式請求(http://www.a.com/user?id=123?callback=foo)的資料將會是如下:

foo({"id": 123, "name" : 張三, "age": 17});當然,如果服務端考慮得更加充分,返回的資料可能如下:

try{foo({"id": 123, "name" : 張三, "age": 17});}catch(e){}

這時候我們只要定義一個foo()函數,並動態地建立一個script標籤,使其的src屬性為http://www.a.com/user?id=123?callback=foo:

<script type="text/javascript" src="http://www.a.com/user?id=123?callback=foo"></script>

便可以使用foo函數來調用返回的資料了。

在jQuery中如何通過JSONP來跨域擷取資料

第一種方法是在ajax函數中設定dataType為'jsonp':

$.ajax({ 2.dataType: 'jsonp', 3.url: 'http://www.a.com/user?id=123', 4.success: function(data){ 5.//處理data資料 6.} 7.});第二種方法是利用getJSON來實現,只要在地址中加上callback=?參數即可:

$.getJSON('http://www.a.com/user?id=123&callback=?', function(data){ 2.//處理data資料 3.});也可以簡單地使用getScript方法:

//此時也可以在函數外定義foo方法

function foo(data){
/處理data資料 }
$.getScript('http://www.a.com/user?id=123&callback=foo');

2、 使用CORS,開發人員可以使用普通的XMLHttpRequest發起請求和獲得資料,比起JSONP有更好的錯誤處理。

3、 JSONP主要被老的瀏覽器支援,它們往往不支援CORS,而絕大多數現代瀏覽器都已經支援了CORS。

PHP中: header(”"Access-Control-Allow-Origin: *”");
html中: <meta http-equiv=”Access-Control-Allow-Origin” content=”*”>

如果CORS中包含了302跳轉,則需要302跳轉之後的網址也包含CORS的header請求。

目前IE8以上和其他主流瀏覽器都已經支援了CORS跨域,相信這個技術未來會非常實用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.