1. 程式人生 > >利用JQUERY實現多個AJAX請求等待

利用JQUERY實現多個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關閉。閉包是內部函式,即使外部函式關閉,也可以訪問外部函式中的變數。換句話說,內部函式可以保持首先定義的環境。

相關推薦

利用JQUERY實現AJAX請求等待

前言 通常,jQuery的函式ajax進行Ajax呼叫。函式ajax只能做一個Ajax呼叫。當Ajax呼叫成功時,執行回撥函式。可選地,當Ajax呼叫返回錯誤時,呼叫另一個回撥函式。但是,該功能不能根據這些請求的結果進行多個Ajax請求和註冊回撥函式。一種情況是,網頁

[轉]ajax請求時控制執行順序或全部執行後的操作

on() .when ati ack login tps als fun lan 本文轉自:https://blog.csdn.net/fsdad/article/details/71514822 一、當確保執行順序時: 1、 請求加async: false,,

nginx利用try_files實現

col 作用 視頻 pre cep files 是否 err data 比如一個視頻網站,視頻資源分散在幾臺機器上,但是給用要提供統一的IP,路徑,端口。就需要nginx,先檢查本機是否有改文件,如果沒有就代理其他地方 location / { root /da

bootstrap中利用Tag實現div的上下頁切換

func acc tex oot trap www. active cli ane 添加 nav 和 nav-tabs 類到 ul 中,將會應用 Bootstrap 標簽樣式,添加 nav 和 nav-pills 類到 ul 中,將會應用 Bootstrap 膠囊式樣式 &

同一頁面ajax請求後臺堵塞問題

有個小夥子告訴我,一個頁面上同時開啟多個ajax,向後臺請求資料,會被堵塞。 “因為是同一個會話。但如果在控制器上加上這個特性就可以了”,小夥子說。 //session只讀,避免同一會話中ses

ajax請求的公共方法

有了ajax請求的公共方法,就省去了每次有ajax請求時都要寫一遍ajax語法的完整方法了,只需要傳遞引數即可//ajax公共方法 - 使用getAjax( '對應要獲取資料的url' , { id : 1 , type : 'xxx' , ... } , function(

jquery $.when()非同步請求成功後再執行後續方法

$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) { // a1 and a2 are arguments resolved for the page1 and

有序傳送ajax請求,獲得對應請求的資料

var urlList=['1.php','2.php','3.php','4.php']; function ajax(index,arr){ if(index<arr.length){ var value=arr[index]; $.ajax

ajax請求php後端導致反應時間慢解決方案

產生的原因 var democ=new Vue({ el:'#list', data:{ her:'', listData:[], listurl:ALLUR

ajax請求時控制執行順序或全部執行後的操作

一、當確保執行順序時: 1、 請求加async: false,,這樣所有的ajax就會同步執行,請求順序就是程式碼順序 2、$.when($.ajax(            {async: false,                url : url1        

利用jquery實現張圖片淡入淡出

功能描述: 圖片播放分為2個順序:正序和反序,正序就是從第一張到最後一張,然後再第一張,反序是從第一張開始,然後最後一張,再到第一張。 1:當沒有滑鼠操作時,圖片正序播放,每隔特定時間播放一次。 2:如果滑鼠從左向右滑動,則圖片跳過間隔時間,播放順序強制切換為正序,立即播放

AJAX 利用JQuery實現AJAX請求

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JqueryAjax.aspx.cs" Inherits="XXX.WebApp.JqueryAjax" %> <!DOCTYPE h

利用JQuery實現更簡單的Ajax跨域請求

<html><head><title>JQuery學習</title><script src="jquery-1.2.6.min.js" type="text/javascript"></script><script type="t

jquery+ajax實現下拉選之間的關聯

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>

js實現請求並列執行

print 多個 timeout ror 使用 創建 int 調用 資料 早上查資料,偶然發現這個話題,發現自己並不會,於是乎,下來研究了一下。 想想之前我們用jquery寫請求的時候,要實現請求的串行執行,我們可能是這麽做的。 $.ajax({ url: ‘‘,

利用 Siblings一步實現同級div,只改變當前點擊的div樣式

ima 可選參數 cto 一個 五個 點擊 rem wid bin 記錄一點,小技巧。直接上代碼嘍,因為今天還沒有功夫扯皮呢。 <!DOCTYPE html> <html> <head&g

JS中如何處理ajax併發請求

js中的多併發處理。 通常 為了減少頁面載入時間,先把核心內容顯示處理,頁面載入完成後再發送ajax請求獲取其他資料這時就可能產生多個ajax請求,為了使用者體驗,最好是傳送並行請求,這就產生了併發問題,應該如何處理?(1)並行改序列如果業務邏輯和使用者體驗允許的情況下,可

利用jQuery實現Ajax 驗證使用者名稱是否存在

非同步重新整理實現方式有多種,也可以藉助JS的多種框架,下面是使用jQuery框架實現的AJAX 驗證使用者名稱是否存在 jQuery.ajax概述 HTTP 請求載入遠端資料。 通過jQuery 底層 AJAX 實現。簡單易用的高層實現見 $.get, $.post 等。$.ajax() 返回其建立的 X

ajax順序執行問題及ajax請求為同步時loading效果無意義的問題

  ajax是一種常用的網頁區域性刷新技術,當請求資料時間較長或防止使用者多次點選等情況下,會在請求資料的過程中新增loading效果,提高使用者體驗。  當需要執行多個ajax並需要考慮執行順序時,可以使用ajax巢狀、同步、回撥三個方法。  1、ajax巢狀: $.ajax({ url : "ur

ModelDriven利用泛型實現Action得到不同的getModel類

public class BaseAction<T> extends ActionSupport implements ModelDriven<T> { Class<T> clazz; T t; public BaseAction()