【发布时间】: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 回调处理程序中访问上下文?
【问题讨论】:
标签: jquery object callback jsonp