Ajax和jsonp區別

來源:互聯網
上載者:User

標籤:rem   來講   原因   字串   屬性   end   樣式   靜態資源   rip   

       大多數情況下,無論是架構還是自己實現都是通過Ajax的方式來向後端請求資料的,而Ajax之間是通過傳輸json格式的檔案來進行資料的傳輸的,大家對Ajax也很熟悉了,那麼為什麼我又要使用jsonp呢?這就要從什麼是jsonp,什麼是json來說一說了。

       json是一種格式,而jsonp是一種調用方式,那麼在大家都使用Ajax的情況下為什麼我不用呢?因為Ajax作為指令碼出於安全的考慮,是不允許訪問非同源的內容的。那麼如果我的前端活動頁面和後端的伺服器不在一個網域名稱下該如何請求資料呢?這個時候就需要jsonp的方式來解決跨域的問題了。

       那麼為什麼jsonp可以跨域呢?其中的原理又是什麼呢?我們下面就來介紹一下jsonp跨域的原理。

       因為同源策略的的原因,對於一個瀏覽器的頁面只有來自一個源的指令碼才可以被執行,這樣的目的是為了安全性,可是卻阻止了資料的請求,所以我們就要從繞開同源策略來入手,什麼情況下允許跨域請求呢?那就是靜態資源!靜態資源是不受域策略限制的,可以載入任意域的指令碼、樣式、圖片等靜態資源,JSOP就是利用這種原理來實現跨域擷取資料的。

我們將需要的json資料放在js檔案中進行傳輸,這樣就可以將需要的資料通過靜態檔案的形式傳過來了,那麼我們就來講講具體是如何?的呢?

       由於是靜態檔案,所以我們在請求的時候首先需要建立一個靜態資源的DOM元素,例如這樣的標籤:

<script src="http://cdn.bootcss.com/zepto/1.1.6/zepto.min.js"></script>

       那麼我們就來一步步的構建這個DOM標籤吧,首先通過document.createElement(‘script’);來建立一個script標籤,然後設定它的src屬性指向需要請求的URL地址,然後將這個元素添加在body中,最後出於安全我們要將剛剛建立的標籤在完成請求後刪除掉。

       在這裡我把我寫的一個封裝好的函數貼出來,很簡單的一個函數就說明了一切~

/* * Created by jonnyf on 15-9-15. * 這個函數是通過JSONP的方式請求後端介面 * 需要傳入三個參數, * url為請求的介面地址,類型為字串 * parameter為請求的參數對象,類型為對象 * callback為完成請求後的回呼函數名稱, 類型為字串 */function getJSONP(url, parameter, callback) {    var Script = document.createElement(‘script‘),        _parameter = parameter,        _url = url,        _callback = callback,        code = ‘‘;    for (var i in _parameter) {        code += i + ‘=‘ + _parameter[i] + ‘&‘    }    Script.src = _url + ‘?‘ + code + ‘callback=‘ + _callback;    document.body.appendChild(Script);    Script.onload = function(){   //  請求成功後移除標籤            Script.remove();        }    Script.onerror = function() {   //  失敗的時候也要移除標籤         alert(‘請求錯誤, 請重試‘);        Script.remove();    };}

     總結:ajax的核心是通過XmlHttpRequest擷取非本頁內容,而jsonp的核心則是動態添加<script>標籤來調用伺服器提供的js指令碼。

Ajax和jsonp區別

相關文章

聯繫我們

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