Имя: Пароль:
IT
Веб-мастеринг
onreadystatechange
0 Помогите
 
12.11.13
10:10
xhr[i] = getXmlHttp()
xhr[i].onreadystatechange = function(e) {
    if (xhr[i].readyState == 4) {
        change();
    }
}
xhr[i].open('GET', 'ya.ru', true);  
xhr[i].send(null);
1 Помогите
 
12.11.13
10:11
в этом примере если i изменится, то работать будет не корректно?
Как сделать правильно?
2 regniws
 
12.11.13
10:20
кажется это не для мисты вопросы, тут только ифоны обсуждают и пятничные ветки.

кажется редкостным гамнокодом - в лямбде использовать итераторы верхнего уровня, еще и от движка может поведение отличиться, видимо.
3 Помогите
 
12.11.13
10:45
(2) а как еще эту хрень в цикле сделать?
4 Asmody
 
12.11.13
10:53
xhr[i].onreadystatechange = function(e) {
    var xxx=xhr[i];
    if (xxx.readyState == 4) {
        change();
    }
}
5 Asmody
 
12.11.13
10:56
не, наврал
xhr[i].onreadystatechange = (function(xxx) {
    retrun function(e) {
        if (xxx.readyState == 4) {
           change();
        }
    })(xhr[i]);
}
6 Asmody
 
12.11.13
10:57
а еще, наверно, можно использовать this, но осторожно
7 Помогите
 
12.11.13
11:14
this пробовал, он равен window
8 regniws
 
12.11.13
11:31
(5) а ради любопытства xhr[i] = getXmlHttp() будет же существовать только в том скоупе, где он создан, так? Когда лямбда по этому событию сработает этот объект xhr[i] все еще будет существовать? ссылка на него где присутствует? или сборщик может уже почистить этот объект?
9 regniws
 
12.11.13
11:36
(+8) а, не, не так. если xhr существует вне скоупа то и ссылки на  getXmlHttp() будут продолжать жить.
10 Помогите
 
18.11.13
05:48
всем спасибо. Сам разобрался. Поменял true на false.
11 Помогите
 
18.11.13
09:52
Тему можно удалить