如何将对象上下文传递给 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 回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery ajax 正确地将 json 对象传递给烧瓶服务器

通过jquery ajax将json对象传递给webmethod

使用 jQuery Ajax 将单个对象传递给 MVC 控制器方法

使用 jQuery Ajax 将参数传递给 WebMethod

如何将上下文对象传递给 NSValueTransformer

将多个参数传递给 jQuery ajax 调用