實現傳送多個Ajax請求
大家知道IE只能一次傳送一個Ajax請求,你是否嘗試過在一個頁面上用Ajax請求多次,雖然可以實現我們發現程式碼很亂
我們來實現一個在頁面呈現快取的例子吧!
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->//獲取Dom
function $(id) { return document.getElementById(id); }
思路:我們把要載入的快取放在一個集合中,再迭代集合實現所有的獲取快取請求
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->var cache={page:"Index",id:"Courses",element:$("Courses")};
//page為載入的快取頁面 id快取ID,element顯示快取的Dom物件
順便插一句:這個例子用Jquery實現的了嗎?可以嘗試一下,呵呵,這幾天好像跟Jquery有仇一樣
上面定義了快取物件,下面的程式碼就建立一個請求Ajax的方法,我們稱之為: AsyncRequest
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->var xmlHttp = null;
function $AsyncRequest(request, callback) {
this.method = request.method!=null&&request.method.toLowerCase()=="post"?"POST":"GET";
this.url = request.url;
this.params = request.params;
this.dataType =request.dataType!=null&&request.dataType.toLowerCase() == "xml" ? "xml" : "text";
this.async = request.async instanceof Boolean ? request.async : true;
if (callback != null) {
this.success = callback.success;
this.error = callback.error;
if (callback.start != null) callback.start();
}
if (xmlHttp == null) {
if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
else if(window.ActiveXObject)xmlHttp=new ActiveXObject("MSXML2.XMLHTTP")||new ActiveXObject("MICROSOFT.XMLHTTP");
else{return false;}
}
var current = this;
xmlHttp.open(this.method, this.url, this.async);
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
if (current.success != null)
current.success(current.dataType == "xml" ? xmlHttp.responseXml : xmlHttp.responseText);
}
else {
if (current.error != null)
current.error(xmlHttp.responseText);
}
}
}
if (this.method== "POST")
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(this.params);
}
呼叫AsyncRequest方法例項:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> $AsyncRequest({ url:"http://127.0.0.1",method:"GET",async:true,dataType:"text" },
{ start: function () {//開始請求執行 },
error:function(){//請求錯誤時執行},
success: function (x) {//成功獲取結果為x}
});
//簡單的就可以像下面這樣呼叫
$AsyncRequest({ url: "/default.htm"}, {
success: function (x) {alert(x);}
});
好了,下面我們來請求獲取快取內容並顯示出來了!新建一個方法叫loadCache()
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->function loadCache(cache,callback) {
this.requestUrl = "/handler/cacheASHtml.ashx?cache.page=" + cache.page +
"&cache.guid=" + cache.id + (cache.params != null ? "&" + cache.params : "")+"&"+Math.random();
var nodeName=cache.element.nodeName;
if (nodeName != null && (nodeName == "DIV" || nodeName == "SPAN")) {
var element = cache.element;
} else { alert('不支援的元素(div,span)' + nodeName); return false; }
$AsyncRequest({ url: this.requestUrl }, { start: function () { element.innerHTML = "載入中!"; },
success: function (x) {element.innerHTML = x;if (callback != undefined) callback(); }
});
}
我們載入顯示一個快取就可以這樣呼叫
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->loadCache({ page: "Index", id: "NearIPrice", element: $("IPrice"));
我們發現請求一個請求並不難,但是要請求多個時候就遇到問題了..
先將要請求的快取放到一個集合中:
window.caches = [{ page: _p, id: "VipSchoolArchive", element: $("VipArchives") },
{ page: _a, id: "DefaultPageVipArchivesRightPart", element: $("VipArchiveAd") },
{ page: _a, id: "DefaultPageVipArchivesBottomPart", element: $("VipArchiveAdBottom")}];
我們現在就要請求這所有的虎頭快取了!吃飯了直接上程式碼...呵呵
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
window.caches = [{ page: _p, id: "VipSchoolArchive", element: $("VipArchives") },
{ page: _a, id: "DefaultPageVipArchivesRightPart", element: $("VipArchiveAd") },
{ page: _a, id: "DefaultPageVipArchivesBottomPart", element: $("VipArchiveAdBottom")}];
loadCacheCollection(window.caches);
function loadCacheCollection(cacheArray) {
cacheArray.reverse();
var s = setInterval(function () {
for (var i in cacheArray) {
loadCache(cacheArray[i],
function () {
cacheArray.pop(cacheArray[i]);
if (cacheArray.length == 0) clearInterval(s);
});
}
}, 10);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-618125/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何傳送請求以及AJAX
- jQuery裡如何使用ajax傳送請求jQuery
- vue中使用axios傳送ajax請求VueiOS
- 首頁 使用axios 傳送ajax請求iOS
- html頁面中如何傳送ajax請求HTML
- 學習AJAX必知必會(4)~JQuery傳送Ajax請求jQuery
- cURL實現傳送Get和Post請求(PHP)PHP
- KKB : Jquery實現Ajax請求jQuery
- 使用 Promise 實現任務佇列傳送請求,實現最大請求數目限制Promise佇列
- 在Java中,使用HttpUtils實現傳送HTTP請求JavaHTTP
- JQuery使用deferreds序列多個ajax請求jQuery
- Postman傳送Post請求Postman
- Java傳送Post請求Java
- 傳送GET請求 示例
- HttpClient--傳送請求HTTPclient
- perl傳送http請求HTTP
- java傳送http請求JavaHTTP
- 利用fetch方法實現Ajax請求
- 解決.NET Core Ajax請求後臺傳送引數過大請求失敗問題
- C# 傳送POST請求C#
- 使用HttpClient傳送GET請求HTTPclient
- 使用httpclient傳送http請求HTTPclient
- ajax上傳檔案的請求
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Zttp 傳送 form params 請求 而非 JSON 請求ORMJSON
- Ajax+SpringMVC實現跨域請求SpringMVC跨域
- ajax跨域post請求,如何實現呢跨域
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- java傳送GET和post請求Java
- 使用Feign傳送HTTP請求HTTP
- python傳送HTTP POST請求PythonHTTP
- post 封裝Map 傳送請求封裝
- PHP傳送POST和GET請求PHP
- postman傳送請求使用篇(二)Postman
- Python傳送請求代tokenPython
- 用Fiddler 傳送post請求
- .net 後臺 傳送http請求HTTP
- 通過PowerShell傳送TCP請求TCP