Почему функции jQuery ajax ".allways" работают некорректно

100
14

У меня есть код Javascript, который всегда запрашивает у сервера некоторые данные.

;var EVENTS = {};
;(function($) {

EVENTS.Test = {
getEventsData: function() {

var events_request = $.ajax({
url: "test1.php",
contentType: 'application/json-rpc',
type: "GET",
timeout: 30000
});

events_request.done(function(results) {alert(results);});

events_request.fail(function(results) {alert(results);});

events_request.always(this.getEventsData);
}
};

})(jQuery);

EVENTS.Test.getEventsData();

Сервер php на стороне сервера выглядит следующим образом

<?php
sleep(5);
echo "This is response";
?>

То, что я хочу сделать, это получить данные с сервера в случае завершения ".done или.fail", поэтому я использую функцию ".always". Но на сервер поступает только два запроса, после чего запрос не выполняется. Я использовал Firebug для отладки. Но, к сожалению, никаких ошибок не было. Как я могу узнать, почему ajax не работает после двух запросов. Как заставить его работать?

Заранее спасибо.

спросил(а) 2021-01-27T16:39:53+03:00 4 месяца, 4 недели назад
1
Решение
117

Проблема заключается в том, когда метод getEventsData вызывается обратным вызовом ajax, this не относится к Test объекту, поэтому this.getEventsData будет неопределенным. Решение состоит в том, чтобы использовать Function.bind() или $.proxy() для передачи пользовательского контекста выполнения для обратного вызова

events_request.always($.proxy(this.getEventsData, this));

Другой вариант - установить параметр контекста $.ajax(), чтобы все обратные вызовы получили настраиваемый контекст выполнения.

Этот объект станет контекстом всех обратных вызовов, связанных с Ajax. По умолчанию контекст представляет собой объект, который представляет параметры ajax, используемые в вызове ($.ajaxSettings, объединенные с параметрами, переданными в $.ajax).

ответил(а) 2021-01-27T16:39:53+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема