在一段时间后杀死Javascript进程

kar*_*grz 5 javascript timeout

如果这是重复,我道歉.

假设我有一个JavaScript函数调用Web服务来提取一些数据.我使用某种移动图形让用户知道它正在工作.成功检索后,我将图形更改为复选标记.这是我的代码:

getData: function() {
    $("#button").attr("disabled", "true");

    var params = {
        doRefresh: false,
        method: '/GetData',
        onSuccess: new this.getDataCallback(this).callback,
        onFailure: new this.getDataFailed(this).callback,
        args: { text: $("#getData").val() }
    };

        WebService.invoke(params.method, params.onSuccess, params.onFailure, params.args);

}
Run Code Online (Sandbox Code Playgroud)

我想要的是5分钟后,如果这个过程仍然没有成功返回我的数据,抛出异常,或者更好的是,运行我的函数this.getDataFailed(this).callback.这似乎对JavaScript有用吗?我查看了setTimeout()和setInterval(),这些似乎只是延迟了脚本的执行,而我希望从字面上"超时"一个长时间运行的进程.有任何想法吗?

此外,我对我的代码的批评/改进持开放态度,这将允许此功能.

And*_*y E 5

IE8提供timeout房产和ontimeout活动.但这些都是非标准的.

我注意到你在一些示例代码中使用了jQuery.jQuery还支持timeoutajax()方法的属性,该属性将error在达到超时限制后执行回调.$.ajaxSetup()在进行任何ajax调用之前,您可以使用该方法声明超时:

$.ajaxSetup({
    timeout: 300000
});
Run Code Online (Sandbox Code Playgroud)

如果你没有使用jQuery来发出请求,你可以滚动你自己的超时代码:

var xhrTimeout;
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://blah.com/etc", true);
xhr.onreadystatechange = function ()
{
    if (xhr.readyState == 4)
        window.clearTimeout(xhrTimeout);
}
xhr.send();
xhrTimeout = window.setTimeout(function ()
{
    xhr.abort();
    failFunction();
}, 300000); // 5 mins
Run Code Online (Sandbox Code Playgroud)