JSONP / YQL: идентификация источника данных - PullRequest
0 голосов
/ 10 июля 2011

Я использую JSONP, чтобы получить Google через YQL (преобразование из JSON в JSONP). Обработчик успеха вызывается, но затем я хочу иметь возможность использовать этот же обработчик для других вызовов YQL и определить в самой функции обработчика, какой сценарий / источник данных использовался. Есть ли способ сделать это?

var url = "http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A%2F%2Fmaps.googleapis.com%2Fmaps%2Fapi%2Fgeocode%2Fjson%3Flatlng%3D"+ latitude.toString()+ "%2C"+ longitude.toString() + "%26sensor%3Dtrue%22&format=json&diagnostics=true&callback=handler";

var script = document.createElement("script");
script.setAttribute("src", url);
document.getElementsByTagName("head")[0].appendChild(script);

1 Ответ

1 голос
/ 10 июля 2011

Я не могу придумать никакого другого способа сделать это, кроме как сохранить какой-то уникальный ключ для каждого вызова API, который вы делаете, и затем хранить там информацию о вызове.Чтобы поддерживать чистоту глобального пространства имен, вы можете создать один объект верхнего уровня, затем выделить подобъекты для запроса в качестве свойств этого и дать каждому свойству ссылку на функцию:

function yqlHandler(json) {
  // ...
}

var uid = 1;
function makeQuery(query, data) {
  var key = 'query-' + uid++;
  yqlHandler[key] = data;
  yqlHandler[key].handler = yqlHandler;
  var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&callback=yqlHandler." + key + ".handler";
  // ... make the JSONP call
}

Таким образом, вы получите this, указывающий на объект «данные», используемый при вызове функции.Есть, конечно, другие, похожие способы сделать это.

...