У меня возникают проблемы с передачей контекста объекта javascript в обработчик обратного вызова ajax-запроса 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. Но в этой функции у меня нет ссылки на исходный объект, который ее вызывает. Я хочу, чтобы вместо этого вызывалась функция success : здесь я могу обратиться к переменной self .
Есть несколько возможных решений, но я не запускаю.
- Я перехватываю имя обратного вызова, которое генерирует для меня jQuery, и помещаю его в качестве значения в параметр jsonpCallback. Я предполагаю, что эта функция делегируется указанной функции success , из которой я могу получить к ней доступ. Но я не вижу способа, как получить это сгенерированное имя.
- Я укажу объект контекста, как я сделал в примере. Документация jQuery утверждает, что этот объект будет доступен для обработчика обратного вызова. Однако я не могу найти, как этот контекст подвергается, например, handleJSON функция из моего примера.
В настоящее время я нашел решение с помощью jquery-jsonp из кода Google. Но все же мне очень любопытно, как решить проблему, как описано в 2. Потому что я думаю, что ссылка jQuery утверждает, что она может быть обработана таким образом. Что делает меня надежным на менее сторонних библиотек.
Может кто-нибудь показать мне, как получить доступ к контексту в обработчике обратного вызова JSONP с помощью jQuery?