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

时间:2010-08-03 19:17:46

标签: jquery object callback jsonp

当ajax提供程序预定义其回调时,我遇到了将javascript对象上下文传递给JSONP 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函数的行。但是在这个函数中我没有引用调用它的原始对象。我希望调用成功函数:这里我可以参考 self 变量。

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

  1. 我将拦截jQuery为我生成的回​​调名称,并将其作为值放在jsonpCallback参数中。我假设此函数委托给指定的 success 函数,我可以从中访问它。但是我认为没办法获得那个生成的名字。
  2. 我将像在示例中一样指定上下文对象。 jQuery文档声明该对象可用于回调处理程序。但是,我无法找到这种情况如何暴露于例如我的例子中的 handleJSON 函数。
  3. 目前我找到了一个使用谷歌代码的jquery-jsonp的解决方案。但我仍然非常好奇如何解决问题,如2所述。因为我认为jQuery引用声明它可以像这样处理。是什么让我可以依赖较少的第三方图书馆。

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

1 个答案:

答案 0 :(得分:13)

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