关于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请求则浏览器会等待该请求完成后才关闭窗口清理资源,因而就不会有这个问题。

新手,多多关照

相关推荐