JSONP / YQL:识别数据源

时间:2011-07-10 14:57:59

标签: jquery ajax json yql

我正在使用JSONP通过YQL获取Google(从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 个答案:

答案 0 :(得分:1)

除了为每个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指向你调用函数时使用的“数据”对象。当然还有其他类似的方法。