Потоковая передача фрагментов JSON в jquery

#jquery #http

#jquery #http

Вопрос:

Возможно ли использовать jquery для поддержания открытого HTTP-соединения и потоковой передачи данных?

С моего веб-сервера я получаю следующее (каждый объект JSON разделяется новой строкой)

 HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

{"a":{"uptime":15876}}
{"a":{"uptime":15877}}
{"a":{"uptime":15878}}
{"a":{"uptime":15879}}
...
  

На моей веб-странице я делаю:

 $.ajax({
        type:       "GET",
        url:        'http://server/stream',
        data:       function(data) { console.log("data=" data); },
        timeout:    20000,
        dataType:   "text",
        error:      function(XMLHttpRequest, textStatus, errorThrown) { console.log(textStatus); },
        success:    function(data) {console.log("done" data); },
        cache:      false
    });
  

Я не вижу выходных данных, и Firebug утверждает, что ответа на HTTP-запрос не было, я вижу счетчик на вкладке Firefox.

tcpdump показывает, что данные принимаются браузером, но я никогда не вижу никаких журналов консоли, как будто все это буферизуется для печати по завершении.

Чего я не понимаю?

Ответ №1:

То, что вы пытаетесь сделать, считается длительным опросом. Это нелегко достижимо с помощью jquery, на что вы, возможно, захотите взглянуть, и это может показаться излишним, так это на неблокирующую серверную технологию, такуюnode.js при этом вы могли бы использовать этот плагин с jQuery.

Ответ №2:

Не совсем. Браузер не передает данные в jquery до тех пор, пока соединение не закроется, поэтому оно не будет работать так, как вы хотите.

Вам нужно использовать что-то вроде сокета.ввод-вывод или печально забытый hookbox для управления подключением к websocket за вас.