利用JQUERY實(shí)現(xiàn)多個AJAX請求等待的實(shí)例
前言通常,jQuery的函數(shù)ajax進(jìn)行Ajax調(diào)用。函數(shù)ajax只能做一個Ajax調(diào)用。當(dāng)Ajax調(diào)用成功時(shí),執(zhí)行回調(diào)函數(shù)。可選地,當(dāng)Ajax調(diào)用返回錯誤時(shí),調(diào)用另一個回調(diào)函數(shù)。
但是,該功能不能根據(jù)這些請求的結(jié)果進(jìn)行多個Ajax請求和注冊回調(diào)函數(shù)。
一種情況是,網(wǎng)頁使多個Ajax請求在禁用用戶交互時(shí)收集頁面不同部分的數(shù)據(jù)。
該頁面僅在頁面獲取所有數(shù)據(jù)之后才能進(jìn)行用戶交互。本文介紹了jQuery提供的一種基于多個Ajax請求來注冊回調(diào)函數(shù)的方法。
這種方法是基于Deferred對象的概念。相關(guān)代碼首先,在后臺的兩個ASP.NET Web API函數(shù)來接受服務(wù)器Ajax調(diào)用。
代碼如下:
后臺接收
ajax請求代碼
要進(jìn)行單個Ajax調(diào)用,可以使用jQuery的ajax函數(shù)。正面是一個簡單的例子:
ajax調(diào)用示例成功和錯誤的回調(diào)函數(shù)正在等待單個Ajax調(diào)用。jQuery庫提供了一種方法來使任何回調(diào)函數(shù)等待多個Ajax調(diào)用。此方法基于稱為Deferred的對象。Deferred對象可以根據(jù)Deferrred對象是否解決或拒絕來注冊回調(diào)函數(shù)。
以下是Deferred的示例
Deferred示例注意Deferred對象可以鏈接。以下是Deferred對象鏈的示例。
Deferred對象有一個方法叫做promise。它返回一個Promise對象。Promise對象暴露了Deferred方法的一個子集,以防止其狀態(tài)被更改。
這意味著防止Deferred對象被手動解析或拒絕。
Promise對象公開以下Deferred方法:then,done,fail,always,pipe,progress,state,和 promise。
它不會公開以下Deferred方法:resolve,reject,notify,resolveWith,rejectWith 和 notifyWith。promise對象可以被視為一個Deferred對象,該對象無法手動更改該狀態(tài)。
jQuery 的ajax函數(shù)返回一個jqXHR對象。
這個jqXHR對象有兩個重要的事實(shí)。
首先,一個jqXHR對象是XMLHTTPRequest對象的超集。
例如,一個jqXHR對象可以通過引用它的readyState屬性來查詢XMLHTTPRequest的狀態(tài)。
如果其readyState為4,則Ajax請求完成。
其次,一個jqXHR對象實(shí)現(xiàn)了Promise接口,并公開了所有的Promise方法。
基本上,一個jqXHR 對象可以被當(dāng)作一個Promise對象。
例如,done方法可以用作jqXHR對象的成功回調(diào)函數(shù)。
jQuery庫提供了一個被稱為when的函數(shù),接受多個Deferred對象并返回一個Promise對象的函數(shù)。
當(dāng)所有Deferred對象被解析時(shí),返回的Promise對象將被解析。當(dāng)任何Deferred對象被拒絕時(shí),它將被拒絕。
傳遞給函數(shù)的Deferred對象when可以是Deferred對象,Promise對象或jqXHR對象。
以下是等待多個Ajax請求的代碼示例
首先,兩個變量存儲從兩個jQuery Ajax調(diào)用返回的jqXHR對象。
然后將兩個對象傳遞給函數(shù)when。返回的Promise對象when被鏈接到函數(shù)then。
函數(shù)then為Promise對象添加了處理程序。
then函數(shù)的第一個參數(shù)是一個成功函數(shù),當(dāng)Promise成功時(shí)調(diào)用它。
then函數(shù)的第二個參數(shù)是在Promise被拒絕時(shí)調(diào)用的失敗函數(shù)。
失敗函數(shù)檢查每個Ajax調(diào)用的狀態(tài)。如果Ajax調(diào)用未完成,它將中止。注意,由于頁面已執(zhí)行和關(guān)閉,失敗函數(shù)仍然可以訪問超出范圍的變量j1和j2 。
這是因?yàn)镴avaScript關(guān)閉。閉包是內(nèi)部函數(shù),即使外部函數(shù)關(guān)閉,也可以訪問外部函數(shù)中的變量。換句話說,內(nèi)部函數(shù)可以保持首先定義的環(huán)境。
以上這篇利用JQUERY實(shí)現(xiàn)多個AJAX請求等待的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
jquery attr方法獲取input的checked屬性問題
如果使用jquery,應(yīng)使用prop方法來獲取和設(shè)置checked屬性,不應(yīng)使用attr,需要的朋友可以參考下2014-05-05JQuery Mobile實(shí)現(xiàn)導(dǎo)航欄和頁腳
導(dǎo)航欄由一組水平排列的鏈接構(gòu)成,通常位于頁眉或頁腳內(nèi)部。本文給大家介紹JQuery Mobile實(shí)現(xiàn)導(dǎo)航欄和頁腳的相關(guān)知識,需要的朋友參考下吧2016-03-03jQueryUI寫一個調(diào)整分類的拖放效果實(shí)現(xiàn)代碼
最近,想用jQuery做一個網(wǎng)頁的樹目錄結(jié)構(gòu),并且可以使用鼠標(biāo)拖動調(diào)整選項(xiàng)的位置。我在網(wǎng)上找了一下插件,基本上看了好幾款比較著名的,都覺得代碼太復(fù)雜了或者界面太丑了等各種不符合我的要求2012-05-05jQuery插件DataTables分頁開發(fā)心得體會
這篇文章主要為大家分享了jQuery插件DataTables分頁開發(fā)心得體會,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Juqery Html(),append()等方法的Bug解決方法
標(biāo)題中說是jquery中的Bug,只是個人這么認(rèn)為,先申明一下!2010-12-12jQuery soColorPacker 網(wǎng)頁拾色器
這篇文章主要介紹了jQuery soColorPacker 網(wǎng)頁拾色器 的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06jQuery實(shí)現(xiàn)導(dǎo)航回彈效果
本文主要介紹了jQuery實(shí)現(xiàn)導(dǎo)航回彈效果的實(shí)例,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02詳談Ajax請求中的async:false/true的作用(ajax 在外部調(diào)用問題)
下面小編就為大家?guī)硪黄斦凙jax請求中的async:false/true的作用(ajax返回值在外部調(diào)用問題)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02