将JQuery 1.3.2升级到1.8.1

时间:2012-09-14 11:38:39

标签: ajax jquery

我被分配了一个任务,将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中一切都很好,如果有必要,我很乐意更改代码我无法找到方法。

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对象,以便您可以在完成后执行操作。

相关问题