0

我被分配了将 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 运行时错误:无法获取未定义或空引用的属性“调用”

谷歌浏览器:

未捕获的类型错误:无法调用未定义的方法“调用”

对象“回调”在 1.8.1 中未定义,但在 1.3.2 中一切正常,如果有必要我很乐意更改代码我只是想不出办法。

4

2 回答 2

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;
于 2012-09-19T07:48:47.070 回答
0

尝试使用 jQuery then():http ://api.jquery.com/deferred.then/

ajax() 返回一个 Deferred 对象,以便您可以让它在完成后执行操作。

于 2012-09-14T11:42:47.350 回答