Я пишу пользовательский скрипт для сайта, который использует Prototype. Вместо того чтобы использовать библиотеки GM (в основном, чтобы я мог легко перенастроить его для Chrome), я решил использовать уже загруженные функции Prototype.
Я перебираю строки таблицы, каждая из которых обозначает уникального пользователя, проверяя наличие онлайн-элемента статуса на странице их профиля.
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("/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>";
}
}
);
}
Наблюдая за выполнением скрипта в Firebug, я вижу, что все GET возвращают действительные тела ответов со статусом 200. Однако «онлайн» отображается только в последней строке. Похоже, что обратные вызовы для предыдущих строк не вызывается. Я проверял это с помощью операторов console.log после каждой строки.
Я искал и обнаружил, что были проблемы с тем, как FB и Firefox 3.5 обрабатывали несколько Ajax.Requests http://code.google.com/p/fbug/issues/detail?id=1948. Я обновился до самой последней бета-версии Firebug и установил последнюю не бета-версию Firefox, до сих пор нет кости. Проблема возникает, даже если у меня полностью отключен FB.
На данный момент я в значительной степени рисую пробел, поэтому я открыт для любых предложений. Спасибо.