2011-07-10 49 views
0

我正在使用JSONP通过YQL获取Google(从JSON转换为JSONP)。 成功处理程序被调用,但我希望能够为其他YQL调用使用相同的处理程序,并能够在处理函数本身中识别使用了哪个脚本/数据源。有没有办法做到这一点?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

我想不出任何办法做到这一点以外,保持某种唯一键的每个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指向你调用该函数时使用的“数据”对象。当然还有其他类似的方法。