怎么让ajax连接超时时自动停止

JavaScript08

怎么让ajax连接超时时自动停止,第1张

如何让ajax连接超时时自动停止 - Web 开发 / Ajax

如题,我知道ajax中有个ajaxGet.abort()方法来停止ajax.但是如何控制时间了?我想到js中的setTimeOut方法,如果再结合clearTimeOut方法是不是就可以完美的实现这个功能了呢?

结果是悲剧的。

不是说setTimeOut(ajaxGet.abort(),5000)不执行,而是与时间无关,不管设多久都会立刻执行。。。

也许我们可以考虑把ajaxGet.abort()放到别的函数中去,然后用传参的方法定时调用。不过,我也尝试过,结果是不仅不可以终止ajax,而且还会让js事件失效。

我的代码如下,是写在表单提交事件中的。

JScript code$('#invite-contact-list-form').submit(function(){

$('#invite-contact-list-prompt').html('正在发送邮件...').css("color","#000")

var outTimeID = setTimeout('$("#invite-contact-list-prompt").html("发送超时,请重试!")', 5000)//设置5秒的超时终止ajax时间

var ajaxGet = $.post($(this).attr('action'),$(this).serialize(),function(o){

clearTimeout(outTimeID)//取消超时设置

$('#invite-contact-list-prompt').empty()

alert(o.info)

},'json')

return false

})

当然,现在已经删掉停止ajax的方法了,但基本结构还在。

最后虽然没有实现这个功能,却也思考了一下其必要性。其实也不是非要实现这个功能不可,试想,如果真的很久都获取不到数据或者没有反应,用户自己会察觉的,或者像我上面那样给出提示即可,没必要硬要去终止ajax.

但怕的就是你都显示超时了,ajax突然起死回生了。。。。

我也就是为了避免后者的尴尬局面才想实现这个功能。。。不过,现在实现不了我就只能把提醒超时的时间设置的久一点了。

ExtJS做Ajax请求的时候,默认的相应时间是30秒,如果后来数据查询时间超过30秒,ExtJS就会报错。

这就需要修改ExtJS的超时时间:在js开始时后加

示例代码如下所示:

view sourceprint?

1.Ext.onReady(function() {

2.Ext.BLANK_IMAGE_URL = '../../common/ext3/resources/images/default/s.gif '

3.Ext.Ajax.timeout = 180000 //设置请求超时时间(单位毫秒)

4.})

timeout不是设置你说的延时的,timeout只是设置延迟执行的,比如说:

第一行代码

setTimeout("第二行代码", 18000)

这只是表示”第二行代码“在第一行代码执行完成后不立即执行,而是等待18000ms才执行。这个跟你的服务器的相应时间没有直接关系的。

你的问题好像没太明白,不过我不确定如果你试试设置ajax请求为同步而不是默认的异步会不会有帮助。