亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

多ajax請求的各類解決方案(同步, 隊列, cancel請求)

2024-09-01 08:26:35
字體:
來源:轉載
供稿:網友
•多個ajax請求同時發送,相互無依賴。
•多個ajax請求相互依賴,必須有先后順序。
•多個請求被同時發送,只需要最后一個請求。
第1種case
應用場景: 這個場景很多,一個頁面打開是多個區域同時請求后臺得到各自的數據,沒依賴,沒順序。
處理方案: 直接用jquery的ajax函數。這個用的非常多,這里從略,可看后面的代碼中例子。
第2種case
應用場景: 多個ajax請求,需要順序執行,后一個ajax請求的執行參數是前一個ajax的結果。例如: 用戶登錄后我們發送一次請求得到用戶的應用ID,然后利用應用ID發送一次請求得到具體的應用內容(例子雖然不是太恰當,但基本就是這個意思了)。
處理方法:
1. 利用ajax參數async設置為false,進行同步操作。(這個方法只適合同域操作,跨域需使用下面兩種方法)
2. 利用ajax嵌套(這個同第1種情況)
3. 利用隊列進行操作
jquery ajax隊列操作核心代碼:
復制代碼 代碼如下:VeVb.com

(function ($) {
var ajaxRequest = {};
$.ajaxQueue = function (settings) {
var options = $.extend({ className: 'DEFEARTNAME' }, $.ajaxSettings, settings);
var _complete = options.complete;
$.extend(options, {
complete: function () {
if (_complete)
_complete.apply(this, arguments);
if ($(document).queue(options.className).length > 0) {
$(document).dequeue(options.className);
} else {
ajaxRequest[options.className] = false;
}
}
});
$(document).queue(options.className, function () {
$.ajax(options);
});
if ($(document).queue(options.className).length == 1 && !ajaxRequest[options.className]) {
ajaxRequest[options.className] = true;
$(document).dequeue(options.className);
}
};
})(jQuery);

第3中case
應用場景: 比較典型的是autocomplete控件的操作,這個我們可以使用第2種情況的處理方法,但我們可能只需要最后次按鍵后返回的結果,這樣利用第2種處理方法未免有些浪費。
處理方法: 保留最后一次請求,cancel之前的請求。
復制代碼 代碼如下:VeVb.com

(function ($) {
var jqXhr = {};
$.ajaxSingle = function (settings) {
var options = $.extend({ className: 'DEFEARTNAME' }, $.ajaxSettings, settings);
if (jqXhr[options.className]) {
jqXhr[options.className].abort();
}
jqXhr[options.className] = $.ajax(options);
};
})(jQuery);

對于這些case都是在多個ajax請求,響應時間不能控制的情況。下面是完整Demo代碼。
復制代碼 代碼如下:VeVb.com

(function ($) {
var jqXhr = {},
ajaxRequest = {};
$.ajaxQueue = function (settings) {
var options = $.extend({ className: 'DEFEARTNAME' }, $.ajaxSettings, settings);
var _complete = options.complete;
$.extend(options, {
complete: function () {
if (_complete)
_complete.apply(this, arguments);
if ($(document).queue(options.className).length > 0) {
$(document).dequeue(options.className);
} else {
ajaxRequest[options.className] = false;
}
}
});
$(document).queue(options.className, function () {
$.ajax(options);
});
if ($(document).queue(options.className).length == 1 && !ajaxRequest[options.className]) {
ajaxRequest[options.className] = true;
$(document).dequeue(options.className);
}
};
$.ajaxSingle = function (settings) {
var options = $.extend({ className: 'DEFEARTNAME' }, $.ajaxSettings, settings);
if (jqXhr[options.className]) {
jqXhr[options.className].abort();
}
jqXhr[options.className] = $.ajax(options);
};
})(jQuery);
var ajaxSleep = (function () {
var _settings = {
type: 'GET',
cache: false,
success: function (msg) {
var thtml = $('#txtContainer').html();
$('#txtContainer').html(thtml + "<br />" + msg);
}
};
return {
get: function (seconds, mode, isAsync) {
var mode = mode || 'ajax',
isAsync = isAsync || false;
$[mode]($.extend(_settings, {
url: "ResponsePage.aspx?second=" + seconds,
async: isAsync,
className: 'GET'
}));
},
post: function (seconds, mode, isAsync) {
var mode = mode || 'ajax',
isAsync = isAsync || false;
$[mode]($.extend(_settings, {
type: 'POST',
url: "PostPage.aspx",
data: { second: seconds },
async: isAsync,
className: 'POST'
}));
}
};
} ());
var launch = function (settings) {
$('#txtContainer').html('');
var mode = settings.mode,
isAsync = settings.isAsync;
ajaxSleep.get(12, mode, isAsync);
ajaxSleep.get(10, mode, isAsync);
ajaxSleep.get(8, mode, isAsync);
ajaxSleep.post(6, mode, isAsync);
ajaxSleep.post(4, mode, isAsync);
ajaxSleep.post(2, mode, isAsync);
}
$(document).ready(function () {
//第1種case
$('#btnLaunchAsync').click(function () {
launch({ isAsync: true });
});
//第2種case
$('#btnLaunchSync').click(function () {
launch({});
});
//第2種case
$('#btnLaunchQueue').click(function () {
launch({ mode: 'ajaxQueue', isAsync: true });
});
//第3種case
$('#btnLaunchSingle').click(function () {
launch({ mode: 'ajaxSingle', isAsync: true });
});
});

default.html
復制代碼 代碼如下:VeVb.com

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="js/default.js"></script>
</head>
<body>
<form id="form1" runat="server">
<input type="button" id="btnLaunchAsync" value="Launch Asynchronous Request" />
<input type="button" id="btnLaunchSync" value="Launch Synchronous Request" />
<input type="button" id="btnLaunchQueue" value="Launch Requested Queue" />
<input type="button" id="btnLaunchSingle" value="Launch Single Request" />
<div id="txtContainer"></div>
</form>
</body>
</html>

PostPage.aspx & ResponsePage.aspx
復制代碼 代碼如下:VeVb.com

//ResponsePage.aspx
protected void Page_Load(object sender, EventArgs e)
{
int seconds = int.Parse(Request.QueryString["second"]);
Thread.Sleep(seconds*1000);
Response.Write("GET: selpt for "+ seconds.ToString() +" sec(s)");
}
//PostPage.aspx
protected void Page_Load(object sender, EventArgs e)
{
int seconds = int.Parse(Request.Form["second"]);
Thread.Sleep(seconds * 1000);
Response.Write("POST: selpt for " + seconds.ToString() + " sec(s)");
}

后注: 個人能力有限,如有錯誤敬請指點。這些只是些根據一些特定情況下的處理,如果一個ajax請求能解決的問題切勿利用兩個請求來處理,畢竟需要占用資源。我還是相信沒有最好的方案,只有最適合的方案。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美亚洲范冰冰与中字| 日韩美女在线播放| 国产成人一区二区三区电影| 成人性生交大片免费看小说| 欧美成人精品不卡视频在线观看| 日韩成人激情视频| 国内揄拍国内精品| 中文字幕日韩精品有码视频| 国产香蕉精品视频一区二区三区| 欧美丰满少妇xxxx| 精品国产精品三级精品av网址| 黄色成人av网| 欧美日本国产在线| 777777777亚洲妇女| 亚洲精品福利在线观看| 68精品久久久久久欧美| 日韩免费精品视频| 久久久91精品国产一区不卡| 欧美色播在线播放| 久久人人爽人人爽人人片av高清| 日韩女优人人人人射在线视频| 97国产一区二区精品久久呦| 国产精品aaa| 国产精品女人久久久久久| 一区二区三区在线播放欧美| 欧美乱大交做爰xxxⅹ性3| 国产最新精品视频| 91探花福利精品国产自产在线| 亚洲精品久久7777777| 91免费视频网站| 欧美国产精品人人做人人爱| 热re99久久精品国产66热| 不卡中文字幕av| 午夜精品一区二区三区av| 色播久久人人爽人人爽人人片视av| 九九热精品视频在线播放| 亚洲乱码av中文一区二区| 精品久久久久久电影| 日韩中文字幕在线视频| 91精品国产91久久久| 欧美理论在线观看| 国产精品扒开腿做爽爽爽视频| 成人免费网站在线观看| 中文字幕九色91在线| 日韩色av导航| 国产精品日韩在线观看| 国产999精品视频| 国产欧美日韩中文字幕在线| 夜夜躁日日躁狠狠久久88av| 成人激情视频在线观看| 91久久国产婷婷一区二区| 国产欧美日韩中文字幕| 日韩视频亚洲视频| 亚洲女人天堂av| 国产成人一区二区| 国产精品视频内| 综合网日日天干夜夜久久| 欲色天天网综合久久| 91久久精品国产91久久性色| 欧美激情免费视频| 色老头一区二区三区在线观看| 91久久久在线| 91精品视频免费观看| 亚洲v日韩v综合v精品v| 国产精品免费一区豆花| 欧美亚洲另类制服自拍| 国产免费一区二区三区香蕉精| 狠狠爱在线视频一区| 欧美激情精品久久久久久| 日韩免费观看视频| 在线免费观看羞羞视频一区二区| 欧美中在线观看| 亚洲第一精品夜夜躁人人躁| 91精品国产91久久久久久不卡| 啪一啪鲁一鲁2019在线视频| 亚洲精品国产精品乱码不99按摩| 成人激情av在线| 亚洲女人天堂色在线7777| 久久激情五月丁香伊人| 亚洲视频在线观看视频| 国产成人精品在线观看| 久久久国产91| 疯狂欧美牲乱大交777| 一本一本久久a久久精品牛牛影视| 免费不卡在线观看av| 免费成人高清视频| 91爱视频在线| 亚洲三级av在线| 国产精品欧美激情在线播放| 中文字幕欧美在线| 免费不卡在线观看av| 国产ts人妖一区二区三区| 日韩在线精品一区| 午夜精品福利在线观看| 成人网在线视频| 欧美视频在线观看免费| 97国产成人精品视频| 国产精品狼人色视频一区| 91极品视频在线| 欧美国产日本高清在线| 性欧美激情精品| 久久精品视频中文字幕| 欧美大片欧美激情性色a∨久久| 成人国产精品久久久久久亚洲| 久久久国产一区| 中文字幕不卡在线视频极品| 欧美亚洲国产另类| 精品国产一区av| 91高潮精品免费porn| 久久97精品久久久久久久不卡| 日韩av在线免费| 欧美激情综合亚洲一二区| 欧美大肥婆大肥bbbbb| 久久久国产一区二区三区| 久久精品视频网站| 91精品综合久久久久久五月天| 69国产精品成人在线播放| 欧美激情小视频| 欧美在线一级va免费观看| 国产性色av一区二区| 最近2019中文免费高清视频观看www99| 亚洲成av人乱码色午夜| 浅井舞香一区二区| xvideos成人免费中文版| 国产成人精品免高潮费视频| 国产在线播放不卡| 色悠久久久久综合先锋影音下载| 国产美女主播一区| 久久久久久美女| 亚洲第一偷拍网| 成人黄色午夜影院| 中文字幕亚洲第一| 欧美高跟鞋交xxxxxhd| 亚洲午夜av电影| 91精品国产91久久久久久| 国产福利精品在线| 亚洲色图狂野欧美| 亚洲精品少妇网址| 久久影视电视剧免费网站清宫辞电视| 在线观看久久久久久| 欧美高清性猛交| 成人久久久久久| 欧美精品情趣视频| 日韩电影免费观看在线观看| 国产精品羞羞答答| 国外日韩电影在线观看| 亚洲精品天天看| 欧美日韩中文在线观看| 超碰精品一区二区三区乱码| 国产精品对白刺激| 91久久久久久久一区二区| 国产精品久久久久久久7电影| 亚洲精品www久久久| 欧美性猛交xxxx乱大交| 亚洲国内精品视频| 国产精品最新在线观看| 久久国产精品偷| 久久91精品国产91久久久| 亚洲欧美日韩另类| 国产伦精品免费视频| 欧美日韩亚洲国产一区| 97久久国产精品| 国产精品久久久久久久久久久久久久| 91亚洲国产成人久久精品网站|