关于jquery的ajax提交到服务器
刚入职不久,今天用jquery的ajax写了一段代码
$(window).unload( function () { var tempPath = $("#tempPath").val(); var userCode = document.getElementById("chatMain_userCode").value; $.ajax({ type: "post", url: tempPath+"/ChatOnlineController?action=changeStatusOff&userCode="+userCode+"&id="+Math.random(), }); } );
想在用户刷新或关闭浏览器的时候能够去访问服务器,但是无论如何,后台也接收不到数据,但是如果在这段代码后加上一个alert提示的话,后台的服务器是能够接收到数据的,这个问题非常费解。
后来经过查资料才发现是ajax的同步异步的问题,在原来的代码里加上async:false就行了,也就是说让它变成同步的。通过网上查阅的资料得知:
因为调用异步的ajax请求在一些浏览器下无法真正使server得到通知,实际上根本无法保障!在发出了这个异步请求之后,浏览器就要关闭窗口并清理所有相关资源,因为这是异步请求,所以浏览器有理由认为无需等待该请求完成即可开始关闭窗口,这样该请求就可能失败(IE上就是这样,用异步请求无法通知到server)。这也解释了为什么异步callServer()调用后面再加个alert语句就没问题了,因为alert语句在后面挡着,需要人来点确认,所以可以完成对server的请求。而用同步的ajax请求则浏览器会等待该请求完成后才关闭窗口清理资源,因而就不会有这个问题。
新手,多多关照
相关推荐
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
Richardxx 2020-11-09
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03
TONIYH 2020-07-22
时光如瑾雨微凉 2020-07-19
83510998 2020-07-18
坚持着执着 2020-07-16
jiaguoquan00 2020-07-07
李永毅 2020-07-05
坚持着执着 2020-07-05