我被分配了一个任务,将JQuery 1.3.2升级到最新版本(目前是1.8.1),除了$ .ajax函数之外,升级后似乎都工作正常,下面的代码调用服务器然后执行回调函数doFurtherStuff
执行其他工作:
function ChangeContent(url, somepageobject) {
var xhrobj = $.ajax({
url: url,
context: somepageobject,
callback: doFurtherStuff,
success: function(data) {
somepageobject.html($(data));
this.callback.call(this.context[0], data); // >> Code breaks here
}
});
return xhrobj;
}
运行此代码块时,服务器数据恢复正常,但后来出现以下错误:
IE10和IE9:
JavaScript运行时错误:无法获取未定义的属性“调用” 或空引用
谷歌浏览器:
未捕获的TypeError:无法调用未定义的方法'call'
对象“回调”在1.8.1中是未定义的,但在1.3.2中一切都很好,如果有必要,我很乐意更改代码我无法找到方法。
答案 0 :(得分:3)
我必须回答我自己的问题,因为所有其他解决方案(虽然正确)不解决我的问题而不改变客户端(被调用者)的通信方式并将参数发送到方法,我无法做到这一点,因为我有无法控制它们(外部客户)。
我需要的只是将上下文中的“context”更改为“thecontext”以处理JQuery 1.8.1,这是工作代码:
function ChangeContent(url, somepageobject) {
var xhrobj = $.ajax({
url: url,
thecontext: somepageobject,
callback: doFurtherStuff,
success: function(data) {
somepageobject.html($(data));
this.callback.call(this.thecontext[0], data); // >> Code breaks here
}
});
return xhrobj;
答案 1 :(得分:0)
尝试使用jQuery then():http://api.jquery.com/deferred.then/
ajax()返回一个Deferred对象,以便您可以在完成后执行操作。