利用jQuery實現多個ajax請求等待

来源:http://www.cnblogs.com/gongyue/archive/2017/12/13/8035116.html
-Advertisement-
Play Games

前言 通常,jQuery的函數ajax進行Ajax調用。函數ajax只能做一個Ajax調用。當Ajax調用成功時,執行回調函數。可選地,當Ajax調用返回錯誤時,調用另一個回調函數。但是,該功能不能根據這些請求的結果進行多個Ajax請求和註冊回調函數。一種情況是,網頁使多個Ajax請求在禁用用戶交互 ...


前言

通常,jQuery的函數ajax進行Ajax調用。函數ajax只能做一個Ajax調用。當Ajax調用成功時,執行回調函數。可選地,當Ajax調用返回錯誤時,調用另一個回調函數。但是,該功能不能根據這些請求的結果進行多個Ajax請求和註冊回調函數。一種情況是,網頁使多個Ajax請求在禁用用戶交互時收集頁面不同部分的數據。該頁面僅在頁面獲取所有數據之後才能進行用戶交互。本文介紹了jQuery提供的一種基於多個Ajax請求來註冊回調函數的方法。這種方法是基於Deferred對象的概念。

相關代碼

首先,在後臺的兩個ASP.NET Web API函數來接受伺服器Ajax調用。代碼如下:

利用jQuery實現多個ajax請求等待

後臺接收ajax請求代碼

要進行單個Ajax調用,可以使用jQuery的ajax函數。正面是一個簡單的例子:

利用jQuery實現多個ajax請求等待

ajax調用示例

成功和錯誤的回調函數正在等待單個Ajax調用。jQuery庫提供了一種方法來使任何回調函數等待多個Ajax調用。此方法基於稱為Deferred的對象。Deferred對象可以根據Deferrred對象是否解決或拒絕來註冊回調函數。以下是Deferred的示例。利用jQuery實現多個ajax請求等待

Deferred示例

註意Deferred對象可以鏈接。以下是Deferred對象鏈的示例。

利用jQuery實現多個ajax請求等待

Deferred對象有一個方法叫做promise。它返回一個Promise對象。Promise對象暴露了Deferred方法的一個子集,以防止其狀態被更改。這意味著防止Deferred對象被手動解析或拒絕。Promise對象公開以下Deferred方法:then,done,fail,always,pipe,progress,state,和 promise。它不會公開以下Deferred方法:resolve,reject,notify,resolveWith,rejectWith 和 notifyWith。promise對象可以被視為一個Deferred對象,該對象無法手動更改該狀態。jQuery 的ajax函數返回一個jqXHR對象。這個jqXHR對象有兩個重要的事實。

首先,一個jqXHR對象是XMLHTTPRequest對象的超集。例如,一個jqXHR對象可以通過引用它的readyState屬性來查詢XMLHTTPRequest的狀態。如果其readyState為4,則Ajax請求完成。

其次,一個jqXHR對象實現了Promise介面,並公開了所有的Promise方法。基本上,一個jqXHR 對象可以被當作一個Promise對象。例如,done方法可以用作jqXHR對象的成功回調函數。jQuery庫提供了一個被稱為when的函數,接受多個Deferred對象並返回一個Promise對象的函數。當所有Deferred對象被解析時,返回的Promise對象將被解析。當任何Deferred對象被拒絕時,它將被拒絕。傳遞給函數的Deferred對象when可以是Deferred對象,Promise對象或jqXHR對象。以下是等待多個Ajax請求的代碼示例:

利用jQuery實現多個ajax請求等待

首先,兩個變數存儲從兩個jQuery Ajax調用返回的jqXHR對象。然後將兩個對象傳遞給函數when。返回的Promise對象when被鏈接到函數then。函數then為Promise對象添加了處理程式。then函數的第一個參數是一個成功函數,當Promise成功時調用它。then函數的第二個參數是在Promise被拒絕時調用的失敗函數。失敗函數檢查每個Ajax調用的狀態。如果Ajax調用未完成,它將中止。註意,由於頁面已執行和關閉,失敗函數仍然可以訪問超出範圍的變數j1和j2 。這是因為JavaScript關閉。閉包是內部函數,即使外部函數關閉,也可以訪問外部函數中的變數。換句話說,內部函數可以保持首先定義的環境。

 

web前端/H5/javascript學習群:250777811 歡迎大家關註我的微信號公眾號,公眾號名稱:web前端EDU。掃下麵的二維碼或者收藏下麵的二維碼關註吧(長按下麵的二維碼圖片、並選擇識別圖中的二維碼)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [1]迭代器實現 [2]迭代器分類 [3]迭代類數組 [4]倒序迭代器 [5]中止迭代器 [6]文件上傳 ...
  • 今天把用ionic做一個案例,和ionic示例項目差不多,只是用requirejs分離了controller,但是一直報錯 Error: [ng:areq] Argument ‘AppCtrl’ is not a function, got undefined 經過一番折騰還是沒能解決。後來我細分析 ...
  • 除法不可用手工演算法來計算,其基本思想是反覆做減法,看從被除數裡面最多能減去多少個除數,商就是多少。 除法函數: 如果前者絕對值小於後者直接返回零 做減法時,不需要一個一個減,可以以除數*10^n為基數來減 如果喜歡我的文章,可以掃描二維碼關註我的微信公眾號 爭取每天都分享一點我自己的開發和練習體驗~ ...
  • 用到一些封裝好的運動函數,主要是定時器 效果為圖片和圖片的描述定時自動更換 commom.js tween.js ...
  • mvc/mvvm "阮大神博客" mvc 分為三層,其實M層是數據模型層,它是真正的後端數據在前端js中的一個映射模型,他們的關係是:數據模型層和視圖層有映射關係,model改變,view展示也會更改,當view產生用戶操作或會反饋給controller,controller更改model,這個時候 ...
  • 1.首先先要下載artTemplate.js,這個可以在官網下載也可以在GitHob進行下載。 2.現在是編寫一個存放html標簽的編寫模板,使用<script type="text/html" id="site_template"></script>裝載,裡面的id是你到時候將確認將數據傳給誰的綁 ...
  • WebpackOptionsDefaulter模塊 通過參數檢測後,會根據單/多配置進行處理,本文基於單配置,所以會進行到如下代碼: 模塊的作用是進行預設值的設置,流程圖如下: 進入該模塊: 可以看到,這個模塊的內容是用ES6的新語法寫的,很好理解,因為這個模塊是只是針對webpack的預設設置,所 ...
  • 最近學習vue.js,下麵是筆記: 重點在3. 可能出現的問題: 1,首先我這邊歷經了慘痛的教訓後,建議各位vue學友,一定要使用Administrator,系統管理員身份登錄,不要使用二級管理員,很容易在安裝腳手架或者其他工具時,出現許可權問題,,登錄Administrator操作電腦後很多亂七八糟 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...