Уничтожьте процесс JavaScript после количества времени набора

Я приношу извинения, если это - дубликат.

Скажем, у меня есть функция JavaScript, которая называет веб-сервис для получения по запросу некоторых данных. Я использую некоторое перемещение, графическое для уведомления пользователя, оно работает. Когда это успешно получено, я изменяю диаграмму на галочку. Вот мой код:

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);

}

То, что я хотел бы, после 5 минут, если этот процесс все еще успешно не возвратил мои данные, для выдачи исключения или, еще лучше, выполнил мою функцию this.getDataFailed (этот) .callback. Это кажется выполнимым с JavaScript? Я посмотрел на setTimeout () и setInterval (), и они, кажется, просто задерживают выполнение сценария, тогда как я хочу к буквально "тайм-ауту" длительный процесс. Какие-либо идеи?

Кроме того, я открыт для любой критики / улучшения моего кода, который допускал бы эту функциональность.

5
задан karlgrz 19 February 2010 в 00:50
поделиться

2 ответа

IE8 предлагает свойство тайм-аута и событие ontimeout . Однако они нестандартны.

Я заметил, что в некоторых примерах кода вы используете jQuery. jQuery также поддерживает свойство timeout для своего метода ajax () , который будет выполнять обратный вызов error после того, как истечет предел времени ожидания. Вы можете использовать метод $. AjaxSetup () , чтобы объявить тайм-аут перед выполнением любых вызовов ajax:

$.ajaxSetup({
    timeout: 300000
});

Если вы не используете 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
5
ответ дан 14 December 2019 в 04:36
поделиться

Я бы сделал это следующим образом (очень грубый psuedocode):

InvokeWebService
setTimeout

onTimeout:
    cancelInvokation
    DoOtherStuff

onWebServiceCompletion:
    cancelOnTimeout
3
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: