大家知道IE只能一次发送一个Ajax请求,你是否尝试过在一个页面上用Ajax请求多次,虽然可以实现我们发现代码很乱
我们来实现一个在页面呈现缓存的例子吧!
//获取Dom
function $(id) { return document.getElementById(id); }
思路:我们把要加载的缓存放在一个集合中,再迭代集合实现所有的获取缓存请求
var cache={page:"Index",id:"Courses",element:$("Courses")};
//page为加载的缓存页面 id缓存ID,element显示缓存的Dom对象
顺便插一句:这个例子用Jquery实现的了吗?可以尝试一下,呵呵,这几天好像跟Jquery有仇一样
上面定义了缓存对象,下面的代码就创建一个请求Ajax的方法,我们称之为: AsyncRequest
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方法实例:
$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()
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(); }
});
}
我们加载显示一个缓存就可以这样调用
loadCache({ page: "Index", id: "NearIPrice", element: $("IPrice"));
我们发现请求一个请求并不难,但是要请求多个时候就遇到问题了..
先将要请求的缓存放到一个集合中:
Code_Closed_Image_121059" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_121059').style.display='none'; document.getElementById('Code_Open_Image_121059').style.display='inline'; document.getElementById('Code_Open_Text_121059').style.display='inline';"
height="16" src="http://www.jzxue.com/System/uploads/allimg/091103/2122260.gif" width="11" align="top" alt="" />Code_Open_Image_121059" style="DISPLAY: none" onclick="this.style.display='none';
document.getElementById('Code_Open_Text_121059').style.display='none'; getElementById('Code_Closed_Image_121059').style.display='inline'; getElementById('Code_Closed_Text_121059').style.display='inline';" height="16" src="http://www.jzxue.com/System/uploads/allimg/091103/2122261.gif"
width="11" align="top" alt="" />Code_Closed_Text_121059">CodeCode_Open_Text_121059" style="DISPLAY: none">
window.caches = [{ page: _p, id: "VipSchoolArchive", element: $("VipArchives") },
{ page: _a, id: "DefaultPageVipArchivesRightPart", element: $("VipArchiveAd") },
{ page: _a, id: "DefaultPageVipArchivesBottomPart", element: $("VipArchiveAdBottom")}];
我们现在就要请求这所有的虎头缓存了!吃饭了直接上代码...呵呵
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);
}
分享到:
相关推荐
然而,当需要发送多个Ajax请求时,可能会出现并发问题,导致数据处理混乱或者请求响应顺序不可控。本文将深入探讨这个问题,并提供解决方案。 一、并发问题的来源 1. 请求队列:浏览器为了防止过多并发请求导致...
这意味着你可以发送多个请求,并且它们会同时进行,而不是按顺序执行。这显著提高了用户界面的响应速度,特别是在需要加载大量数据或执行多个独立任务时。 2. **Promise和async/await**:随着ES6的推出,Promise和...
在这个请求完成之前,浏览器不会渲染任何内容,也不会执行任何JavaScript代码。如果这个请求耗时过长,就会导致用户界面看起来像是被冻结了。这就是我们所说的“浏览器假死”。 在本例中,开发者想要实现一个点击...
在进行Ajax调用过程中一般都具有这样的做法:显示一个GIF图片动画表明后台正在工作,同时阻止用户操作本页面(比如Ajax请求通过某个按钮触发,用户不能频繁点击该按钮产生多个并发Ajax请求);调用完成后,图片消失...
- AJAX请求配置:使用jQuery的`.ajax()`或`.get()`、`.post()`方法,设置请求URL、类型(GET或POST)、携带的数据(如页码和每页数量),以及成功的回调函数。 2. **AJAX请求**: ```javascript $.ajax({ url: ...
以下是一个简单的Ajax GET请求示例: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/api/data?key=value', true); xhr.onload = function() { if (this.status == 200) { ...
XHR对象支持多个事件,这些事件在请求的不同阶段触发,例如`onreadystatechange`是最常用的事件,它在每次状态改变时触发。而`load`事件则在请求成功完成时触发,`error`事件在请求失败时触发。 - **...
但是,对于非简单请求(如POST、PUT、DELETE等),浏览器会先发送一个预检请求(OPTIONS),询问服务器是否允许跨域。此时,服务器需要响应`Access-Control-Allow-Methods`、`Access-Control-Allow-Headers`等相关...
ASP.NET AJAX 多文件上传是一种...综上所述,ASP.NET AJAX多文件上传涉及到前端与后端的协同工作,包括异步通信、文件处理、用户交互和错误处理等多个环节。通过合理的实现,可以为用户提供流畅、安全的文件上传体验。
总结,Ajax跨域请求WebService.asmx是一个结合了前端JavaScript异步请求技术和后端C# Web服务交互的实例,它涉及到了跨域策略、HTTP通信、CORS配置以及JSON数据交换等多个Web开发的重要知识点。正确理解和运用这些...
这是因为如果未正确处理,一个简单的按钮点击可能会导致Ajax请求和表单提交同时发生,造成不期望的重复提交问题。 当使用HTML表单提交数据时,点击类型为submit的按钮默认会触发表单的提交。在使用JavaScript的Ajax...
在实际应用中,我们经常需要发送多个Ajax请求来获取或更新数据,而这些请求的顺序处理则显得尤为重要,尤其是在处理依赖于前一个请求结果的后续请求时。本篇文章将深入探讨如何实现多个有序的Ajax访问,并通过实例...
Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分...这个示例提供了一个基础的Ajax请求流程,实际应用中,可能需要考虑更多的细节,如错误处理、数据序列化、缓存策略等。
- 示例中的`async:false`设置表明这个请求是同步的。同步请求会阻塞其他操作,直到请求完成。这种做法通常不推荐,因为它会导致用户体验变差。 7. **success**:(可选) 当请求成功时执行的回调函数。 - 示例中的`...
单点登录是指用户只需要进行一次身份认证,便可以访问多个应用系统,无需重复登录。这种方式大幅提升了用户体验,并且在安全性方面也有所增强。但在企业部署中,OA系统与报表系统往往部署在不同的服务器上,这就涉及...
### AJAX中同时发送多个请求XMLHttpRequest对象处理方法 在现代Web开发中,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于实现网页的部分更新而无需重新加载整个页面。这一技术的核心在于利用`...
同时,可以封装一个通用的分页组件,方便在多个地方复用。 综上所述,Ajax分页请求是Web开发中的常见实践,通过合理运用Ajax和相关技术,可以构建出高效、流畅的分页交互。在实际项目中,还需要根据具体需求进行...
gzip是一种基于DEFLATE算法的压缩格式,它会将连续的数据流分成多个块进行独立压缩,每个块压缩后都会加上一个头部信息,包含块的长度、CRC校验等。当浏览器发送Ajax请求时,如果支持gzip,会在HTTP头中添加`Accept-...
本项目"ajax多标签导航"显然是利用Ajax来实现一个具有多个标签页的导航功能,通过JavaScript技术提高用户体验,使得用户在切换不同标签时无需等待页面完整刷新。 一、Ajax基础 Ajax的核心是XMLHttpRequest对象,它...
在`prototype.js`中发送Ajax GET请求时,你可以通过以下方式设置请求头来指定编码: ```javascript var request = new Ajax.Request(url, { method: 'get', parameters: {param1: '中文参数'}, requestHeaders: ...