@toha_man

Почему запрос вначале обрабатывается дважды?

Серверная часть (node.js):
var http       =     require('http'),
    static	   =     require('node-static'),
    server     =     new static.Server('.');
if (!module.parent) {
    http.createServer(accept).listen(8080);
} else {
    exports.accept = accept;
}
console.log("Server launched at port 8080");

function accept(req, res) {
    if (req.url == '/digits') {
        res.writeHead(200, {
            'Content-Type': 'text/plain',
            'Cache-Control': 'no-cache'
        }); 

        var i = 0;
        var timer = setInterval(write, 1000);

        function write() {
            res.write(new Array(1000).join(++i + '') + ' ');
            if (i == 9) {
                clearInterval(timer);
                res.end();
            }
        }
    } else {
        server.serve(req, res);
    }
}


Запрос формируется по нажатию на кнопку и выводится в div'чик с помощью функции:
function query() {
    var req        = createRequest(),
       output     = $('.js-ajax__content');

   req.open("GET", "digits", true);
   req.send();
   
  var buffer = "", ext = "";
   req.onreadystatechange = function () {
       if (req.readyState == 3) {
            ext = req.responseText.replace(new RegExp(buffer, 'g'), '');
            buffer = req.responseText;

          output.append(req.readyState + ". " + ext);
       }
   }
}


На выводе получается
3. 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
3. 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
3. 444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
3. 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
3. 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
3. 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
3. 888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
3. 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

Почему-то при первом срабатывании onreadystatechange responseText уже содержит массив единиц и двоек, а не как ожидается только единиц. Почему?)))
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
@toha_man Автор вопроса
Разобрался. Дело в том что ответ формируется длинною в 1,000 байт, если изменить массив на Array (1050), то чанки ответа идут каждый в своей строке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы