`
shadowlin
  • 浏览: 46768 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

异步模式下的Ajax的同步问题

阅读更多
   虽然Ajax可以设置为同步或者异步模式,但是在某些情况下(比如用jsonp实现ajax跨域调用)只能让Ajax工作在异步模式下。但是很多时候异步模式会带来一些编程上的麻烦,所以我写了个用于同步异步ajax的函数,在这里和大家分享下希望对有相同需求的朋友有所帮助,也请大家提下建议和意见。
/**
 * Ajax同步函数
 * @param ajaxCompleteFlagCallback 用于判断Ajax调用是否完成的回调函数
 * @param synchronizedCallback 和ajax同步的函数
 * @return
 */
function ajaxSynchronizer(ajaxCompleteFlagCallback,synchronizedCallback){
	var intervalId=null;
	function waitAjaxCompleteFlag(){
		if(ajaxCompleteFlagCallback()){
			synchronizedCallback();
			clearInterval(intervalId);
			intervalId=null;
		}
	}
	if(!ajaxCompleteFlagCallback()){
		intervalId=setInterval(waitAjaxCompleteFlag,150);
	}else{
		synchronizedCallback();
	}
}


函数的参数是两个回调函数,一个是用来判断ajax是否完成(可以通过在ajax的回调函数中设置一个完成标志来实现),一个是需要和ajax同步的函数。
分享到:
评论
2 楼 shadowlin 2010-03-31  
Relucent 写道
其实这个和异步同步问题无关。
你只是成功之后调用某个方法。其实还是异步的ajax,而且写得复杂了。

Ajax本身是有有同步的调用方法的,可以直接用。

另外你的 if(!ajaxCompleteFlagCallback()){  多个个括号


你注意看下我前面说的话,如果你用jsonp来跨域调用的话是不能设置成同步模式的(jquery的ajax函数,不知道是为什么,如果有人知道希望能告知一下)。
我的标题也是写的《异步模式下的ajax的同步问题》。
另外,你说我多个括号的地方你可以仔细看看,是没有多的。
不过管怎么说,谢谢关注这个帖子:)
1 楼 Relucent 2010-03-31  
其实这个和异步同步问题无关。
你只是成功之后调用某个方法。其实还是异步的ajax,而且写得复杂了。

Ajax本身是有有同步的调用方法的,可以直接用。

另外你的 if(!ajaxCompleteFlagCallback()){  多个个括号

相关推荐

    ajax 同步和异步XMLHTTP代码分析

    而在C++开发中,同步模式应该是主流,如果一定要使用异步模式加回调,可以参考Using IXMLHTTPRequest onreadystatechange from C++一文。 下面是采用异步模式获取远程主机上RSS文件的代码,关键的地方是设置一个回调...

    Ajax同步与异步传输的示例代码

    代码如下://同步传输模式 function RequestByGet(nProducttemp,nCountrytemp) { var xmlhttp if (window.XMLHttpRequest) { //isIE = false; xmlhttp = new XMLHttpRequest(); } else if (window....

    ajax+jquery

    举个例子:普通B/S模式(同步) AJAX技术(异步) * 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 * 异步: 请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理...

    ajax课件.ppt

    举个例子:普通B/S模式(同步) AJAX技术(异步) * 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 * 异步: 请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理...

    Java异步请求

    1、同步交互模式,客户端提交请求,等待,在响应回到客户端前,客户端无法进行其他操作 2、异步交互模型,客户端将请求提交给Ajax引擎,客户端可以继续操作,由Ajax引擎来完成与服务武器端通信,当响应回来后,Ajax...

    Ajax的基本概念与原理

    这是一种十分不连贯的运行模式,常常需要长时间按的等待以及整个页面的刷新,即通常所说的”白屏”现象,而且是整个页面的刷新,这就增加了用户等待时间,数据重复传递也浪费了大量的资源和网络带宽,而Ajax采用的是异步...

    浅谈socket同步和异步、阻塞和非阻塞、I/O模型

    在进行网络编程时,常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞...例如:ajax请求(异步): 事件触发->服务器处理(浏览器可做其他的)->处理完毕,ajax回调函数处理结果 阻塞/非阻塞主要针对S端: 阻塞(等待)

    Javascript异步编程详解

    Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)."异步模式"非常重要。在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。在服务器端,...

    ASP.NET WebAPi(selfhost)实现文件同步或异步上传

    同时我们在MVC系列中讲过文件上传,本文结合MVC+WebAPi来进行文件的同步或者异步上传,顺便回顾下css和js,MVC作为客户端,而WebAPi利用不依赖于IIS的selfhost模式作为服务端来接收客户端的文件且其过程用Ajax来实现...

    JS异步处理的进化史深入讲解

    为了解决这个问题,javascript语言将任务分为两种模式: 同步:当我们打开网站,网页的页面骨架渲染和页面元素渲染,就是一大推同步任务。 异步:我们在浏览新闻时,加载图片或音乐之类占用资源大且耗时久的任务...

    嵌入式系统/ARM技术中的基于Ajax技术的Web 2.0开发应用

    这种转变避免了繁琐的部署工作,同时也体现了瘦客户的开发理念,但同步交互方式带来客户端响应速度慢的问题始终困扰着最终用户。基于Ajax(Asynchronous JavaScript. and XML)的Web 2.0技术改变原有的同步交互为异步...

    Web信息系统异步编程模式的探讨 (2012年)

    在Web信息系统的开发过程中,将Web多线程技术和Ajax技术有机结合起来,提出了一种异步编程模式,有效地解决同步编程模式会出现开销大且费时的程序段阻塞当前进程,以及在客户端无法实时读取服务器端进程状态信息的问题。...

    dwr框架包含帮助文档

    在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到.DWR允许WEB开发人员传递一个回调函数,来异步处理Java函数调用过程. 另处 .dwr还是文件的一种格式: 比如以Dreamweaver软件里有查找和替换...

    js实现简单实用的AJAX完整实例

    //2、异步同步模式的属性设定 //3、数据加载自动超时设置 //4、***数据加载事件的添加,通过事件可以进行服务器数据的实时处理 //5、增加回调函数中用户自定义参数this.e //6、增加ajax反复提交控制,只需将ajax对象...

    基于AJAX的动态树状菜单的设计及实现

    树状菜单是Web应用系统中常见的数据结构,但由于传统的Web应用采用同步交互模式,使对菜单的操作总是伴随着页面刷新,不仅浪费资源,而且降低系统性能,针对这个问题,通过分析Ajax技术特点,设计并实现了一种高效的...

    AJAX(XMLHttpRequest.status)状态码

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String ...(默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器

    AJAX技术在学生收费系统中的应用研究

    在AJAX之前,Web开发中采用的是同步交互方式,如JSP,但其后果是客户端必须一直等待服务器的响应,以至于冻结页面,有时用户不得不离开访问页面。在此研究了基于AJAX异步刷新而提供与服务器异步通信的能力,从而使...

    KODExplorer 芒果云-资源管理器

    - 解决更改排序方式后 ——对应右键菜单不同步问题。 - 优化右键更改列表状态,同步保存配置到服务端。 - 文件浏览器打开(a点击新窗口跳转,a不支持click,用子元素冒泡来实现点击) - 优化配置文件存储方案。直接由...

    骑士PHP人才系统 4.2.66.zip

    修正 分站模式下积分商城、帮助中心url问题;修正 手机注册帐号时提示已被注册;修正 触屏绑定二级域名后pc浏览器无法访问触屏版问题(研究院指导);修正 触屏职位列表和pc职位列表搜索时加参数后结果不一致问题;...

Global site tag (gtag.js) - Google Analytics