Как передать Контекст объекта обратному вызову jQuery.ajax JSONP?

Я сталкиваюсь с проблемами для передачи контекста объекта 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. Но в этой функции у меня нет ссылки на исходный объект, который это называет ею. Я хочу это, функция успеха вызвана вместо этого: здесь я могу обратиться к сам переменная.

Существует несколько возможных решений, но я не получаю выполнения.

  1. Я прерву имя обратного вызова, которое jQuery генерирует для меня и поместил его как значение в jsonpCallback параметре. Я предполагаю, что это функции-делегаты к указанной функции успеха, от которой я могу получить доступ к этому. Но я не вижу пути, как получить то сгенерированное имя.
  2. Я укажу объект контекста как, я сделал в примере. Документы jQuery указывают, что этот объект был бы доступен обработчику обратного вызова. Однако я не могу найти, как этот контекст выставляется, например, функция handleJSON от моего примера.

В настоящее время я находил решение с jquery-jsonp из кода Google. Но тем не менее мне очень любопытно, как решить проблему, как описано в 2. Поскольку я думаю, что ссылка jQuery указывает, что могла быть обработана как этот. Что делает меня надежным на меньшем количестве сторонних библиотек.

Кто-то может показать мне, как получить доступ к контексту в обработчике обратного вызова JSONP с помощью jQuery?

5
задан Brian Tompsett - 汤莱恩 7 June 2015 в 11:06
поделиться