Чек 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-вызов уже находится внутри функции, где вы могли бы сделать это.