为什么使用jQuery';s ajax”;.总是“;函数工作不正常


Why the jQuery's ajax ".always" functions is not working properly

我有下面的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"完成的情况下从服务器获取数据,所以我使用了".valways"函数。但是只有两个请求被发送到服务器,之后就没有请求了。我使用Firebug进行调试。但不幸的是,没有任何错误。我怎么能知道为什么ajax在两次请求后都不起作用。如何使其工作?

提前谢谢。

问题是当ajax回调调用getEventsData方法时,this没有引用Test对象,因此this.getEventsData将未定义。解决方案是使用Function.bind()或$.proxy()将自定义执行上下文传递给回调

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

另一个选项是设置$.ajax()的上下文选项,这样所有回调都将获得一个自定义的执行上下文。

这个对象将成为所有Ajax相关回调的上下文。通过默认情况下,上下文是一个表示ajax设置的对象在调用中使用($.ajaxSettings与传递给的设置合并$.ajax).