2011-07-10 78 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指向你調用該函數時使用的「數據」對象。當然還有其他類似的方法。