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

如何将对象上下文传递给jQuery.ajax JSONP回调?,jquery,object,callback,jsonp,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", jso

当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(); 职能人员(anId){ 这个名字; this.id=anId; var self=这个; this.loadName=函数(){ $.ajax({ url:“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函数的
  • 目前,我从google代码中找到了一个使用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();
    

    谢谢你的快速回复。您的答案似乎很简单,但我的服务提供商总是将JSON封装在自己的回调中:jsonFlickrApi({JSON}),并且生成的回调jQuery名称被忽略。如果提供参数“jsoncallback=handleJSON”,则可能会影响回调名称,但这也不是选项,因为这样我只能传递一个全局作用域函数名,我需要传递一个对象作用域函数名。@hobbiest:在这种情况下,您可以使用
    jsonpCallback
    属性指定
    'jsonFlickrApi'
    作为函数名,但不创建函数。
    ajax
    方法将为您创建函数。解决方案在上一篇评论文章中解释过,但它生成错误,指出回调函数不存在。。。