使用核心javascript时在ajax调用中设置超时

时间:2015-12-18 07:55:26

标签: javascript ajax

我有一个JavaScript函数来调用ajax。现在我需要在这个函数中添加时间,就像调用服务花费的时间超过了ajax调用应该超时并显示默认消息。我不想在其中使用Jquery。

这是我的代码:

AJAX = function (url, callback, params) {
        var dt = new Date();
        url = (url.indexOf('?') == -1) ? url + '?_' + dt.getTime() : url + '&_' + dt.getTime();
        if (url.indexOf('callback=') == -1) {
            ajaxCallBack(url, function () {
                if (this.readyState == 4 && this.status == 200) {
                    if (callback) {
                        if (params) {
                            callback(this.responseText, params);
                        } else {
                            callback(this.responseText);
                        }
                    }
                }
            });
        } else {
            var NewScript = d.createElement("script");
            NewScript.type = "text/javascript";
            NewScript.src = url + '&_' + Math.random();
            d.getElementsByTagName('head')[0].appendChild(NewScript);
        }
    },
    ajaxCallBack = function (url, callback) {
        var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = callback;
        xmlhttp.open("GET", url, true);
        xmlhttp.send();
    }

1 个答案:

答案 0 :(得分:2)

如果您只想添加超时,可以在三个位置的第一个函数中添加它:

        setTimeout(function() {callback(this.responseText, params)}, 1000)

你的回调将在1秒后执行。第二个问题是第二次回调。

我建议的第三个地方是像上面那样包装这个函数:

        ajaxCallBack(url, function () {
            if (this.readyState == 4 && this.status == 200) {
                if (callback) {
                    if (params) {
                        callback(this.responseText, params);
                    } else {
                        callback(this.responseText);
                    }
                }
            }
        });

通常当我进入测试互联网连接时,我宁愿在Chrome开发者工具中添加限制,如下所示:

enter image description here

以下是第一种方法的代码:

        AJAX = function (url, callback, params) {
                var dt = new Date();
                url = (url.indexOf('?') == -1) ? url + '?_' + dt.getTime() : url + '&_' + dt.getTime();
                if (url.indexOf('callback=') == -1) {
                    ajaxCallBack(url, function () {
                        if (this.readyState == 4 && this.status == 200) {
                            if (callback) {
                                if (params) {
                                    console.log(new Date());
                                    setTimeout(function() {callback(this.responseText, params)}, 2000);
                                } else {
                                    console.error((new Date()).getSeconds());
                                    setTimeout(function() {callback(this.responseText)}, 2000);
                                }
                            }
                        }
                    });
                } else {
                    var NewScript = d.createElement("script");
                    NewScript.type = "text/javascript";
                    NewScript.src = url + '&_' + Math.random();
                    d.getElementsByTagName('head')[0].appendChild(NewScript);
                }
            },
        ajaxCallBack = function (url, callback) {
                var xmlhttp;
                if (window.XMLHttpRequest) {
                    xmlhttp = new XMLHttpRequest();
                } else {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.onreadystatechange = callback;
                xmlhttp.open("GET", url, true);
                xmlhttp.send();
        }

        AJAX('http://ip.jsontest.com/', function() {console.error((new Date()).getSeconds()); });