如何将对象上下文传递给 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