我在将一个javascript对象上下文传递到JSONP ajax请求的回调处理程序时遇到了问题,当ajax提供程序预定义其回调时(Flickr是服务提供者)。
我将给出一个简化的示例:
``` function Person(anId) { this.name; this.id = anId; var self = this; this.loadName = function() { $.ajax({ url: "jsonp.json", dataType: "jsonp", jsonpCallback : "handleJSON", data : {id: this.id}, context: self, success: function (data) { self.name = data.name; } }); } }
var handleJSON = function(data) { console.log("received " + data.name ); }
var a = new Person(234); a.loadName(); var b = new Person(345); b.loadName(); ```
以上示例运行完美,控制台输出了handleJSON函数的内容。但是在这个函数中,我没有对调用它的原始对象的引用。我想让`success`函数被调用,这样我就可以引用`self`变量。
有几种可能的解决方案,但我没有找到任何一种能够运行的方法。
1. 我会拦截jQuery为我生成的回调名称,并将其作为jsonpCallback参数的值放置。我认为这个函数会委托给指定的`success`函数,从这个函数中我可以访问到`this`。但我看不到如何获取生成的名称。 2. 我会像在示例中所做的那样指定上下文对象。jQuery文档说明这个对象将可用于回调处理程序。但我找不到如何将此上下文暴露给例如`handleJSON`函数。
目前,我在谷歌代码中找到了使用jquery-jsonp的解决方案。但我仍然非常好奇如何解决上述第2点描述的问题。因为我认为jQuery参考文献说明可以像这样处理。这使我对第三方库更加依赖。
有人能向我展示如何使用jQuery访问JSONP回调处理程序中的上下文吗?
我将给出一个简化的示例:
``` function Person(anId) { this.name; this.id = anId; var self = this; this.loadName = function() { $.ajax({ url: "jsonp.json", dataType: "jsonp", jsonpCallback : "handleJSON", data : {id: this.id}, context: self, success: function (data) { self.name = data.name; } }); } }
var handleJSON = function(data) { console.log("received " + data.name ); }
var a = new Person(234); a.loadName(); var b = new Person(345); b.loadName(); ```
以上示例运行完美,控制台输出了handleJSON函数的内容。但是在这个函数中,我没有对调用它的原始对象的引用。我想让`success`函数被调用,这样我就可以引用`self`变量。
有几种可能的解决方案,但我没有找到任何一种能够运行的方法。
1. 我会拦截jQuery为我生成的回调名称,并将其作为jsonpCallback参数的值放置。我认为这个函数会委托给指定的`success`函数,从这个函数中我可以访问到`this`。但我看不到如何获取生成的名称。 2. 我会像在示例中所做的那样指定上下文对象。jQuery文档说明这个对象将可用于回调处理程序。但我找不到如何将此上下文暴露给例如`handleJSON`函数。
目前,我在谷歌代码中找到了使用jquery-jsonp的解决方案。但我仍然非常好奇如何解决上述第2点描述的问题。因为我认为jQuery参考文献说明可以像这样处理。这使我对第三方库更加依赖。
有人能向我展示如何使用jQuery访问JSONP回调处理程序中的上下文吗?
jsonpCallback
属性将'jsonFlickrApi'
指定为函数名称,但不要创建该函数。ajax
方法会为您创建该函数。 - Guffa