【问题标题】:How to pass Object context to jQuery.ajax JSONP callback?如何将对象上下文传递给 jQuery.ajax JSONP 回调?
【发布时间】:2011-03-24 22:06:33
【问题描述】:

当 ajax 提供程序预定义其回调时,我遇到了将 javascript 对象上下文传递到 JSONP ajax 请求的回调处理程序的问题。 (Flickr 是服务提供商)。

我将举一个简化的例子:

函数人(anId){ 这个名字; this.id = anId; 变种自我=这个; this.loadName = function() { $.ajax({ 网址:“jsonp.json”, 数据类型:“jsonp”, jsonpCallback : "handleJSON", 数据:{id:this.id}, 背景:自我, 成功:函数(数据){ self.name = data.name; } }); } } var handleJSON = 函数(数据){ console.log("收到" + data.name ); } var a = 新人(234); a.loadName(); var b = 新人(345); b.loadName();

上面的例子完美运行,控制台输出handleJSON函数的行。但是在这个函数中,我没有对调用它的原始对象的引用。我希望改为调用 success 函数:这里我可以引用 self 变量。

有几种可能的解决方案,但我没有运行任何解决方案。

  1. 我将截取 jQuery 为我生成的回​​调名称,并将其作为值放入 jsonpCallback 参数中。我假设这个函数委托给指定的 success 函数,我可以从中访问它。但我看不出如何获得生成的名称。
  2. 我将像在示例中那样指定上下文对象。 jQuery 文档声明该对象可用于回调处理程序。但是我找不到这个上下文是如何暴露的,例如我的示例中的 handleJSON 函数。

目前我从谷歌代码中找到了一个使用 jquery-jsonp 的解决方案。但我仍然很好奇如何解决第 2 节中描述的问题。因为我认为 jQuery 参考说明它可以这样处理。是什么让我依赖较少的第三方库。

谁能告诉我如何使用 jQuery 在 JSONP 回调处理程序中访问上下文?

【问题讨论】:

    标签: jquery object callback jsonp


    【解决方案1】:

    只保留jsonpCallback 属性,让jQuery 创建被调用的函数及其函数名。该函数将使用您指定的上下文调用您指定的成功回调。

    function Person(anId) {
     this.name;
     this.id = anId;
     this.loadName = function() {
      $.ajax({
       url: "jsonp.json",
       dataType: "jsonp",
       data : {id: this.id},
       context: this,
       success: function (data) {
        this.name = data.name;
       }
      });
     }
    }
    
    var a = new Person(234);
    a.loadName();
    var b = new Person(345);
    b.loadName();
    

    【讨论】:

    • 感谢您的快速回复。您的回答似乎微不足道,但我的服务提供商总是将 JSON 包装在自己的回调中: jsonFlickrApi({json}) 并且忽略了生成的回调 jQuery 名称。如果您提供参数“jsoncallback=handleJSON”,您可以影响回调名称,但这也不是选项,因为那时我只能传递全局范围函数名称,并且我需要传递对象范围函数名称。
    • @TheHobbieist:在这种情况下,您使用jsonpCallback 属性将'jsonFlickrApi' 指定为函数名称,但不要创建函数。 ajax 方法将为您创建函数。
    • 上一条评论中解释的解决方案有效,但它产生错误,说回调函数不存在...
    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 2012-03-23
    • 1970-01-01
    • 2014-01-21
    • 2011-09-13
    • 1970-01-01
    • 2016-09-03
    • 2013-08-20
    相关资源
    最近更新 更多