Как связать результат ошибки Ajax с исходным запросом? - PullRequest
4 голосов
/ 09 декабря 2010

Я отправляю данные на сервер небольшими пакетами, используя функцию jQuery ajax.Каждый кусок данных представляет собой простую карту значений ключей (свойство data, переданное в функцию ajax).

Если запрос не выполняется, как мой обработчик событий ошибки может определить , который Не удалось загрузить конкретный набор данных?

Сигнатура функции обработчика ошибок jQuery:

error(XMLHttpRequest, textStatus, errorThrown)

Ни 1013 *, ни errorThrown не кажутся полезными для идентификации неудачного набораданных, и XHR, похоже, тоже не предоставляет такую ​​возможность.

Проще говоря, в случае сбоя запроса я хочу получить свойство id переданного мной dataк функции ajax.Как я могу это сделать?

Ответы [ 2 ]

7 голосов
/ 09 декабря 2010

Чек this ... Из документов - обратите внимание на выделенный раздел:

beforeSend, error, dataFilter, *Опции 1010 * и complete принимают функции обратного вызова, которые вызываются в соответствующее время.Объектом this для всех них будет объект в свойстве context, переданный в настройки $.ajax; если это не было указано, это будет ссылка на сами настройки Ajax.

Так, в обратном вызове error() (также success и complete и т. Д.), this будет объектом, переданным в $.ajax() - если только вы не используете параметр context для его изменения.

Как примечание, параметр data, переданный в $.ajax(), будетпреобразован в сериализованную строку для запроса GET или POST

Другой вариант - просто убедиться, что ваш обратный вызов error() имеет доступ к переменной в той же области:

 (function() { 
   // create a scope for us to store the data:
   var data = {id: 1};
   $.ajax({
      url: '/something-to-genereate-error',
      data: data,
      error: function() {
        console.log(this, data);
      }
   });
 })(); // call the function immediatey

См. Эту скрипку для примера - Обратите внимание, что data внутри this - это "id=1", а data, у которого мы держали копию, все еще {id:1}

- Обратите внимание, что замыкание здесь ((function() { .... })()) в значительной степени не нужно, оно просто показывает способ сохранения переменной data перед передачей ее в $.ajax() и использованием ее в обратном вызове.Скорее всего, этот ajax-вызов уже находится внутри функции, где вы могли бы сделать это.

0 голосов
/ 09 декабря 2010

Хорошо, я думаю, что нашел (основываясь на моем предыдущем ответе и ответе от gnarf,

$.ajax({
    type: "POST",
    url: "not-found",        
    context: {id: 123, name: "hello world"},        
    error: function(){  
        console.debug($(this)); //only works in chrome                    
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...