Простой способ отслеживать результат запроса для определения времени ожидания сеанса? - PullRequest
2 голосов
/ 13 июля 2010

У меня есть приложение 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?

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Вы можете использовать $.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 голосов
/ 13 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...