Javascript 为什么使用jQuery';s ajax";。“始终”;功能不能正常工作

Javascript 为什么使用jQuery';s ajax";。“始终”;功能不能正常工作,javascript,php,jquery,ajax,long-polling,Javascript,Php,Jquery,Ajax,Long Polling,我有以下Javascript代码,它总是向服务器请求一些数据 ;var EVENTS = {}; ;(function($) { EVENTS.Test = { getEventsData: function() { var events_request = $.ajax({ url: "test1.php", contentType: 'application/json-rpc',

我有以下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在两次请求后为什么不工作。如何让它工作


提前感谢。

问题是当ajax回调调用
getEventsData
方法时,此未引用
Test
对象,因此
此.getEventsData
将未定义。解决方案是使用或向回调传递自定义执行上下文

events_request.always($.proxy(this.getEventsData, this));
另一个选项是设置的上下文选项,以便所有回调都将获得自定义执行上下文

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


问题是当ajax回调调用
getEventsData
方法时,this没有引用
Test
对象,因此
this.getEventsData
将被取消定义。解决方案是使用或向回调传递自定义执行上下文

events_request.always($.proxy(this.getEventsData, this));
另一个选项是设置的上下文选项,以便所有回调都将获得自定义执行上下文

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


或者只要
$.proxy(this.getEventsData,this)
,假设第一次使用正确的上下文调用函数。@MattiasBuelens是。。。否则,即使是
this.getEventsData
引用也无法工作……这就是所需要的。顺便说一句,我更喜欢$.proxy()或只
$.proxy(this.getEventsData,this)
,假设第一次使用正确的上下文调用函数。@MattiasBuelens是的。。。否则,即使是
this.getEventsData
引用也无法工作……这就是所需要的。顺便说一句,我更喜欢$.proxy()