我有以下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";
?>
我想要做的是从服务器获取数据,以防万一&#34; .done或.fail&#34;完成,所以我使用&#34; .always&#34;功能。但是只有两个请求发送到服务器,之后没有请求。 我使用Firebug进行调试。但遗憾的是没有任何错误。我怎么知道为什么ajax在两个请求之后不工作。如何使它工作?
提前致谢。
答案 0 :(得分:6)
问题是当ajax回调调用getEventsData
方法时this
没有引用Test
对象,因此this.getEventsData
将是未定义的。解决方案是使用Function.bind()或$.proxy()将自定义执行上下文传递给回调
events_request.always($.proxy(this.getEventsData, this));
另一种选择是设置$.ajax()的上下文选项,以便所有回调都能获得自定义执行上下文。
此对象将成为所有与Ajax相关的回调的上下文。通过 默认情况下,上下文是表示ajax设置的对象 在调用中使用($ .ajaxSettings与传递给的设置合并 $就)。