【问题标题】:Accessing the calling object into ajax response... (not the ajax call)将调用对象访问为 ajax 响应...(不是 ajax 调用)
【发布时间】:2010-12-24 15:50:18
【问题描述】:

我有一个 Application 类型的对象(由我定义)。每当创建这种类型的对象时,它会使用 jquery ajax 自动加载一个 php 文件,例如“start.php”,并将响应分配给一个 div,例如“Respo”。现在我想要的是从该 Respo div 访问 Application 对象。不幸的是,我不知道如何做到这一点...... 在我的 ajax 调用中:

  function Application(options)
  {
  .......

  var appObj=this;
  $.ajax({
   url:appObj.location,      //Already defined
   success:function(data)
   {
   $("#respo").html(data);
   }
   });
  }

现在在我的 Respo 部门中,我想访问该 Application 对象...我尝试过: 警报(这个) 但它导致了一个 DOMWindow 的对象...... 我尝试将成功功能编辑为:

  function Application(options)
  {
        .......

        var appObj=this;
        $.ajax({
         url:appObj.location,      //Already defined
         success:function(data)
         {
             $("#respo").html("<script type='text/javascript'>var Self="+appObj+"</script>");
             $("#respo").html(data);
         }
         });
  }

但我无处可去。 :( 虽然如果我分配“var Self='nishchay';”然后从 start.php 提醒 Self 给出 nishchay 但我无法将 Application 类型的调用对象分配给 Self 变量。这是我反刍的唯一方法的。:\

请帮助我...实际上我的对象有一些编辑功能来控制自己 - 它的外观和一些其他选项。我希望对象加载的代码来控制对象本身。

请帮帮我.. 提前致谢。 尼什哈伊

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以在 $.ajax 中将“this”作为“context”属性(jQuery1.4)传递,然后您可以在“success”回调中简单地作为“this”访问它,下面是 jQuery 文档所说的:

    这个对象将成为上下文 所有与 Ajax 相关的回调。为了 将 DOM 元素指定为的示例 上下文将使上下文 请求的完整回调

    这里是代码示例:

    function Application(options)
      {
            .......
    
            var appObj=this;
            $.ajax({
             url:appObj.location,      //Already defined
             context: this,
             success:function(data)
             {
                 console.log( this ); // will be pointing to the object that you passed as the value of the "context" property
    
                 // YOU SHOULD NOT BE USING THINGS LIKE BELOW
                 //$("#respo").html("<script type='text/javascript'>var Self="+appObj+"</script>");
                 $("#respo").html(data);
             }
             });
      }
    

    希望对你有帮助。

    【讨论】:

    • 我已经尝试过了,但它只帮助我在回调函数中访问 appObj。在“#respo”下定义的 javascript 代码中,这仅指向 DOM 窗口...我已尽力而为,但它始终指向 DOM 窗口...
    • 我不清楚你所说的“在#respo下定义”是什么意思,一个疯狂的猜测可能是你使用jQuery的$.data”方法将应用程序对象存储到“#respo”div中,类似的东西 $('#respo').data('appObj', applicationObject ) 然后稍后访问它。
    • 看...我有一个应用程序 javascript 对象...现在在 DOM 中,它相当于一个带有“window”类的 div 这个 div 有一个元素“respo”,我在其中加载内容通过 jquery 加载....通常内容来自开发人员编写的 php 文件...该 php 文件可能包含一些 javascript 代码。现在我想要的是这些 javascript 代码可以访问可以处理窗口类的 dom 元素的应用程序对象。我已经编写了处理它的所有代码,但唯一的问题是为开发人员提供应用程序对象......
    • 现在你的解决方案真的很不错,但是由于每个应用程序都有一个带有“window”类的 div,而这个 div 又有一个“respo”分区,那么我不能在这里使用 jquery.data ...如果我使用 jquery .data 然后#respo 不会引用单个对象...或者如果有任何方法可以获得进行javascript调用的划分...那么问题在很大程度上解决了.. :\
    • 不知道有没有解决,但是可以看到更多代码吗?
    【解决方案2】:
    var appObjPool = {}; var appObjID = 'xxx'; 功能应用(选项) { ………… appObjPool[appObjID] = appObj; var appObj=appObjPool[appObjId]; $.ajax({ url:appObj.location, //已经定义 成功:功能(数据) { $("#respo").html("var Self=appObjPool['"+appObjID+"']"); $("#respo").html(数据); } }); }

    【讨论】:

    • 嘿,谢谢这个回复和建议,但我昨天只试过了(:P),你成功了。唯一的问题是这里定义的 Self 是全局的(本地到 Window 是 JavaScript Scope 的顶级)所以如果我加载说 5 个应用程序,那么 Self 将只引用最后一个应用程序对象......这个解决方案最初似乎工作但我后来意识到了......:\我能想到的唯一解决方案是,如果有任何方法可以定义每个“#respo”的本地自我......但无法获得任何线索继续...有什么建议吗???这将有很大的帮助... :)
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多