2010-07-13 4 views
2

У меня есть приложение Ajax, к которому я бы хотел добавить сеансы и логины.Простой способ отслеживания результата запроса для обнаружения таймаута сеанса?

В настоящее время приложение использует JQuery получить сокращенную, чтобы послать запрос

that.ajaxRequest = $.get(query_string, function(data, textStatus, xhr) { 

    // do somthing with data 

}); 

У меня есть система на сервере, который выбрасывает сообщение об ошибке, если сеанс уже истек.

На клиенте я знаю, что могу справиться с этим, используя следующие:

that.ajaxRequest = $.get(query_string, function(data, textStatus, xhr) { 

    if (data == "E_TIMEOUT") { 

     // redirect to login 

    } else { 

     // do something 

    } 

}); 

Однако я предпочел бы не иметь, чтобы написать тот же код тайм-аут для каждого $ .get - есть куча из них во всем приложении.

Есть ли способ отслеживать результат запроса и при необходимости предпринимать действия, не переписывая все мои операторы $ .get?

Спасибо,

+0

Вы действительно должны проверить/подтвердить ответ, который возвращается. Вы можете сделать определенную функцию для этого, чтобы свести к минимуму код, который вы добавляете к каждому обратному вызову. if (dataChecker (data)) {} и dataChecker могут нести ответственность за перенаправление или другие функции в зависимости от сообщения об ошибке, если таковое имеется. – Fosco

ответ

3

Вы можете использовать $.ajaxSetup() для этого:

$.ajaxSetup({ 
    complete: function (xhr) { 
    if (xhr.getResponseHeader('E_TIMEOUT') == "1") { 
     //redirect to login 
    } 
    } 
}); 

Этот подход несколько отличается, он использует заголовки ответа, которые вы можете получить без разбора данных дополнительное время каждого запроса (т.е. возможно, хотя и не задокументированы и подлежат разрыву), что вам нужно было бы сделать иначе, в глобальной ситуации.

На стороне сервера, на которую вы посылаете E_TIMEOUT ответ, просто измените его, чтобы добавить заголовок, а также E_TIMEOUT=1 (или любой другой заголовок, который вы хотите). Я фактически помещаю этот заголовок только на мою страницу входа в систему, перенаправляет таймауты через 302 (что XmlHttpRequest прозрачно следует), поэтому, если тайм-ауты пользователя и запрос AJAX на самом деле оказались на странице входа в систему, я делаю location.reload(), чтобы отразить это на стр. Это просто еще один вариант, если вы идете по этому пути, это выглядит следующим образом:

$.ajaxSetup({ 
    complete: function (xhr) { 
    if (xhr.getResponseHeader('LoginPage') == "1") { 
     location.reload(); 
    } 
    } 
}); 

Не зная платформы, что сервер вы используете, я не могу сказать, как установить заголовки, но это довольно легко на каждой общей платформе.

+0

Очень приятно. Спасибо! – Travis

0

Вы должны использовать firefox и загрузить программу под названием «FireBug». Это покажет вам все отправленные запросы и ответ, который возвращается из вызова AJAX. Это действие, дополненное добротой & инструменты для веб-разработчиков.

Смежные вопросы