国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 22:52:22
文檔

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

多ajax請求的各類解決方案(同步, 隊列, cancel請求):•多個ajax請求同時發送,相互無依賴。 •多個ajax請求相互依賴,必須有先后順序。 •多個請求被同時發送,只需要最后一個請求。 第1種case 應用場景: 這個場景很多,一個頁面打開是多個區域同時請求后臺得到各自的數據,沒依賴,沒順序。
推薦度:
導讀多ajax請求的各類解決方案(同步, 隊列, cancel請求):•多個ajax請求同時發送,相互無依賴。 •多個ajax請求相互依賴,必須有先后順序。 •多個請求被同時發送,只需要最后一個請求。 第1種case 應用場景: 這個場景很多,一個頁面打開是多個區域同時請求后臺得到各自的數據,沒依賴,沒順序。

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

(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之前的請求。
代碼如下:

(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代碼。
代碼如下:

(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
代碼如下:

<!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
代碼如下:

//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請求能解決的問題切勿利用兩個請求來處理,畢竟需要占用資源。我還是相信沒有最好的方案,只有最適合的方案。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

多ajax請求的各類解決方案(同步, 隊列, cancel請求):•多個ajax請求同時發送,相互無依賴。 •多個ajax請求相互依賴,必須有先后順序。 •多個請求被同時發送,只需要最后一個請求。 第1種case 應用場景: 這個場景很多,一個頁面打開是多個區域同時請求后臺得到各自的數據,沒依賴,沒順序。
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 又黄又爽的视频 | 在线精品欧美日韩 | 亚洲伊人天堂 | 国产一区二区精品久久 | 国产精品欧美一区二区三区 | 亚洲不卡中文字幕 | 亚洲视频在线免费观看 | 阿v精品一区二区三区 | a免费国产一级特黄aa大 | 国产精品久久亚洲一区二区 | 精品国产亚一区二区三区 | 国产成人亚洲综合 | 日日做夜夜爱 | 九九九国产 | 明星国产欧美日韩在线观看 | 欧美国产成人精品一区二区三区 | 精品欧美一区二区在线观看欧美熟 | 日韩欧美电影在线观看 | 自拍偷拍亚洲区 | 欧美视频精品在线 | 在线欧美日韩制服国产 | 国模吧双双大尺度炮交gogo | 亚洲欧美日韩高清 | 欧美激情伦妇在线观看 | 全黄a一级毛片 | 久久精品国内一区二区三区 | 91精品国产色综合久久 | 国产在线观看精品一区二区三区91 | 久久一区二区精品综合 | 亚洲欧美日韩高清综合678 | 久久国语精品 | a级毛片免费高清视频 | 久久99精品一久久久久久 | 国内精品久久久久 | 欧美日韩中文 | 亚洲午夜一区二区三区 | 久久亚洲精品国产亚洲老地址 | 欧美天天搞 | 久久国产成人午夜aⅴ影院 久久国产精品成人免费古装 | 国产视频在| 欧美日本日韩aⅴ在线视频 欧美日韩91 |