javascript — почему jQuery’s ajax & quot; всегда & quot; функции не работают должным образом

У меня есть следующий код 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 не работает после двух запросов. Как заставить это работать?

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

0

Решение

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

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

Другой вариант — установить контекстную опцию $ .Ajax () так что все обратные вызовы получат пользовательский контекст выполнения.

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

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]