ajax---中断xmlHttp请求.
提问:
ajax异步请求 服务器响应时间太长 用户想中断请求 怎么办?
1,普通的方式
xmlHttp.open("POST","theUrl",true);
xmlHttp.onreadystatechange=function(){
...//得到响应之后的操作
}
xmlHttp.send();
//设置8秒钟后检查xmlHttp对象所发送的数据是否得到响应.
setTimeout("CheckRequest()","8000");
function CheckRequest(){
if(xmlHttp.readyState!=4){
alert('响应超时');
//关闭请求
xmlHttp.close();
}
}
=======================
主要的js代码如下:
// 倒计时
var beginTime="30";
function DoConverseCallTimer(){
beginTime=parseInt(beginTime,10)-1;
if(beginTime<0){
window.clearTimeout(timer);
}else{
$('displayTime').innerText=beginTime;
timer1= window.setTimeout("DoConverseCallTimer()",1000);
}
}
}
// 取消请求状态
function callInProgress (xmlhttp) {
switch (xmlhttp.readyState) {
case 1: case 2: case 3:
return true;
break;
default:
return false;
break;
}
}
// 显示超时错误信息
function showFailureMessage(){
alert('系统繁忙,请稍候再试!');
}
var handle={
onCreate: function(request) {
// 当创建Ajax请求时,显示loading
Element.show('loading');
// 启动倒计时
DoConverseCallTimer();
request['timeoutId'] = window.setTimeout(
function() {
if (callInProgress(request.transport)) {
request.transport.abort();
showFailureMessage();
}
},
30000 // thirty seconds
);
},
onComplete: function(request) {
if(Ajax.activeRequestCount==0){
Element.hide('loading');
}
window.clearTimeout(request['timeoutId']);
window.clearTimeout(timer);
}
onException: function(request){
if(Ajax.activeRequestCount==0){
Element.hide('loading');
}
window.clearTimeout(request['timeoutId']);
window.clearTimeout(timer);
}
}
// 将handle注册到合局Ajzx.Responders对象,使其生效
Ajax.Responders.register(handle);