關於jQuery.ajax()的jsonp碰上post詳解

來源:互聯網
上載者:User

標籤:檔案   href   eth   詳解   images   跨域請求   網域名稱   非同步請求   strong   

前言

以前一直以為當$.ajax()的 dataType設定為jsonp時,其method(要求方法)無論怎麼設定,都會變成get,直到前兩天遇到了一個坑。

下面來一起看看詳細的介紹:

關於跨域請求與jsonp

  • 跨域:由於受到同源策略(協議、網域名稱、連接埠三者必須全部相同)的影響,ajax請求會受到限制,要突破這種限制,跨域便產生了。跨域的解決方案有多種,這裡不展開闡述,只是針對GET請求中的jsonp跨域解決方案做一下說明。
  • jsonp,本質上jsonp不是xhr非同步請求,就是請求了一個js檔案,因此在chrome的network面板中的xhr標籤下看不到jsonp的跨域請求,在js標籤下能看到。就是利用script標籤中src不受同源策略的限制,前端定義了回呼函數,請求的js指令碼中擷取資料,並執行前端的回呼函數,因此前後端需要統一定義下回呼函數名。
  • $.ajax中jsonp,$.ajax對jsonp進行了封裝看起來像是ajax請求。由於jsonp是針對get請求的跨域解決,因此之前的經驗告訴我,即使type設定了post,在jsonp的時候,也會自動轉換成get,直到有一天踩了個坑。翻看$.ajax模組的源碼發現,只有去手動設定crossDomain為true,或者實際上是跨域,才會設定為get。否則還是填入的type

結論:

手動設定crossDomain為true,或者真的是跨域,才會修改type為GET,否則還是傳入的type參數

關於jQuery.ajax()的jsonp碰上post詳解

相關文章

聯繫我們

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