如何将对象上下文传递给 jQuery.ajax JSONP 回调?

Posted

技术标签:

【中文标题】如何将对象上下文传递给 jQuery.ajax JSONP 回调?【英文标题】:How to pass Object context to jQuery.ajax JSONP callback? 【发布时间】: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 变量。

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

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

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

谁能告诉我如何使用 jQuery 在 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 方法将为您创建函数。 上一条评论中解释的解决方案有效,但它产生错误,说回调函数不存在...

以上是关于如何将对象上下文传递给 jQuery.ajax JSONP 回调?的主要内容,如果未能解决你的问题,请参考以下文章