我正在爲使用Prototype的網站編寫一個userscript。我決定使用已經加載的Prototype函數,而不是使用GM庫(主要是我可以輕鬆地爲Chrome重新設計它)。原型Ajax.Request只調用最後一個回調
我通過檢查其配置文件頁面上的在線狀態元素遍歷表中的各行,每個表示一個唯一用戶。
dom = unsafeWindow; //shortening unsafewindow
console.log("main start");
var rows = dom.$$("#users tbody>tr");
var users = dom.$$("#users tbody>tr .user_avatar");
console.log(rows);
for (var i=0; i < users.length; i++) {
var row = rows[i];
var user = users[i];
new dom.Ajax.Request("https://stackoverflow.com/users/" + user["title"] + ".html", { //user["title"] is the username
method:'get',
onSuccess: function(response) {
var state = "offline";
if (response.responseText.indexOf("now_online") > -1) {
state = "online";
}
row.childElements()[1].innerHTML += "<br /><b>" + state + "</b>";
},
onFailure: function(request) {
row.childElements()[1].innerHTML += "<br /><b>Error</b>";
}
}
);
}
觀察螢火蟲執行腳本,我看到所有的獲取與爲200的狀態返回有效響應機構然而,「在線」僅被顯示的最後一行。看起來好像前面的行的回調沒有被調用。我已在每行之後用console.log語句驗證了這一點。
我搜索了一下,發現FB和Firefox 3.5如何處理多個Ajax.Requests http://code.google.com/p/fbug/issues/detail?id=1948。我升級到了最新的Firebug測試版,並且擁有最新的非beta版Firefox,但仍然沒有骰子。即使我完全禁用FB,也會出現問題。
在這一點上,我非常在空白,所以我願意接受任何和所有的建議。謝謝。
這是一個常見問題。請參閱http://stackoverflow.com/questions/1061622/javascript-onclick-anonymous-function-help/1061671#1061671 – 2009-11-19 00:22:30
'元素'從哪裏來?它是如何實例化的? – 2009-11-19 00:24:37
此外 - http://james.padolsey.com/javascript/closures-in-javascript/ – 2009-11-19 00:27:08