#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 за вас.