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

当ajax提供程序预定义其回调时,我遇到了将javascript对象上下文传递给JSONP ajax请求的回调处理程序的问题。 (Flickr是服务提供商)。

我将举一个简化的例子:

 function Person(anId){
  this.name;
  this.id = anId;
  var self = this;
  this.loadName = function(){
   $就({
    url:“jsonp.json”,
    dataType:“jsonp”,
    jsonpCallback:“handleJSON”,
    data:{id:this.id},
   背景:自我,
   成功:函数(数据){
     self.name = data.name;
    }
   });
  }
 }

 var handleJSON = function(data){
  console.log(“已收到”+ data.name);
 }

 var a = new Person(234);
 a.loadName();
 var b = new Person(345);
 b.loadName();



上面的示例工作正常,控制台输出handleJSON函数的行。 但在这个函数中,我没有引用调用它的原始对象。 我希望调用成功函数:这里我可以引用变量。

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

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

目前我找到了一个使用谷歌代码的jquery-jsonp的解决方案。 但我仍然非常好奇如何解决问题,如2所述。因为我认为jQuery引用声明它可以像这样处理。 是什么让我可以依赖较少的第三方图书馆。

有人可以告诉我如何使用jQuery访问JSONP回调处理程序中的上下文?

只留下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();