如何在收到响应之前继续发送ajax请求?

时间:2013-08-08 22:43:06

标签: javascript xml ajax

我需要每2秒左右继续敲击相同的ajax请求,直到收到回复。这是因为它被发送的设备一次进入休眠状态3秒 - 它需要在唤醒时捕获请求。有没有一种简单的方法可以通过在我的代码中添加一些内容来实现不使用jquery ......

这就是我只发送一个请求:

 function ePOST(url, postData, callback) {
var postReq = AjaxRequest();
postReq.onreadystatechange = function() {
    if (postReq.readyState == 4) {
        if (postReq.error) {
            callback(1, "Request had an error.");
            alert('postReq Error');
        } else {
            var stat;
            try {
                stat = postReq.status;
            } catch (err) {
                callback(1, "Failed to get HTTP status from server.");
                return;
            }
            if (stat == 200 || stat == 0) {
                callback(0, postReq.responseText);
            } else {
                callback(1, "Unexpected HTTP Status: "
                        + postReq.status);
                alert('Unexpected HTTP Status: '
                    + postReq.status);
            }
        }
    }
}
if (postReq.overrideMimeType){
    postReq.overrideMimeType("text/xml");
}
setTimeout('',1000);
postReq.open("POST", url, true);
postReq.send(postData);
return postReq;
}

1 个答案:

答案 0 :(得分:0)

我认为你应该能够通过对该功能的修改很少来做到这一点。

var intervalId = window.setInterval(function() {
    epost(<url>,<data>,function(error,response) {
        if (!error) {
            window.clearInterval(intervalId);
        } else {
            alert(response); // or handle error some other way
        }
        // do something with the data
    });
},2000);

我不是百分之百确定intervalId可用于闭包,但如果没有,你总是可以这样做:

var intervalId;
intervalId = window.setInterval(....

我能想到的唯一问题是,如果ajax调用需要的时间超过2秒才能返回,在这种情况下,您可能无法清除时间间隔。