封裝ajax和Promise

來源:互聯網
上載者:User
封裝ajax和Promise 一、ajax

ajax 全稱為“Asynchronous JavaScript And XML”(非同步JavaScript和XML) 是指一種建立互動式網頁應用的開發技術、改善使用者體驗,實現無重新整理效果。

優點:
a、不需要外掛程式支援
b、頁面無重新整理,使用非同步方式與伺服器通訊,具有更加迅速的響應能力,優秀的使用者體驗
c、提高Web程式的效能
d、可以把以前一些伺服器負擔的工作轉到用戶端,利用用戶端閑置的能力來處理,減輕伺服器的負擔,由於ajax的原則是“按需取資料”,所以就可以最大程度的減少冗餘請求,提高效能。

缺點:
a、破壞瀏覽器“前進”、[上一頁] 按鈕的正常功能,可以通過簡單的外掛程式彌補 。
b、對搜尋引擎的支援不足。
c、安全問題:ajax暴露了與伺服器互動的細節。 二、Promise

Pomise是es6中的一個非同步處理對象,從它可以擷取非同步作業的訊息,特點:

1)對象的狀態不受外界影響。Promise對象代表一個非同步作業,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。

2)一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise對象的狀態改變,只有兩種可能:從pending變為fulfilled和從pending變為rejected。 三、ajax和Promise封裝

    // (原生js)封裝Promise對象和ajax過程    var jsGetAjaxPromise = function(param){        return new Promise(function(resolve, reject ){            var xhr = new XMLHttpRequest();            xhr.open('get', param.url, true);            xhr.onload = resolve;            xhr.onerror = reject;            xhr.send();        })    }    // 調用樣本    var p1 = jsGetAjaxPromise({  // 啟動第一個任務        url: 'cross-domain1.txt' // 要擷取的檔案地址    });    p1.then(function(response){  // 處理第一個非同步任務的結果(每次調用then都會返回一個新建立的Promise對象)        console.log(response);        return jsGetAjaxPromise({ // 啟動第二個任務             url: 'cross-domain2.txt'        })    }).then(function(response2){  // 處理第二個任務的結果        console.log(response2);        return jsGetAjaxPromise({ // 啟動第三個任務              url: 'cross-domain3.txt'        })    }).then(function(response3){  // 處理第二個任務的結果        console.log(response3);    }).catch(function(err){        console.log(err);    });

改寫成jquery實現

    // (jquery)封裝Promise對象和ajax過程    var jqGetAjaxPromise = function(param){        return new Promise(function(resolve, reject){            $.ajax({                url: param.url,                type: 'get',                data: param.data || '',                success: function(data){                    resolve(data);                },                error: function(error){                    reject(error)                }            });        });    };    // 調用樣本    var p2 = jqGetAjaxPromise({            url: 'cross-domain1.txt'    });    p2.then(function(data){              console.log(data);        return jqGetAjaxPromise({              url:'cross-domain2.txt'        });    }).then(function(data2){           console.log(data2);    }).catch(function(err){        console.log(err);    });

PS: 由於涉及ajax,所以本文中所有的代碼都在wamp伺服器上啟動並執行, cross-domain.txt檔案是自訂的檔案。

相關文章

聯繫我們

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