2014-02-14 2 views
3

Я пытаюсь прочесть простую длинную систему опроса (да, я делаю не хочу использовать любой готовый сценарий, как я хочу извлечь из него). Я использую сервер узлов, где я могу легко передавать/записывать свои данные обратно клиенту, не звонив result.end();. Как мне сделать эту клиентскую сторону? Я просто хочу, чтобы это было простым и не очень хорошим резервом для пользователей, то есть < = 9, поскольку лучшие браузеры получают быстрый и простой в использовании websocket.Простой XHR длинный опрос без jQuery

Долгосрочный короткий вопрос: как сделать длинный опрос в простой JS без jQuery или другой структуры? (Или есть лучший способ, чем длительный опрос).

ответ

1

Является следующим, что вы ищете?

var xhr = new XMLHttpRequest(); 
    xhr.responseType = 'blob';//or 'text', 'json', ect. there are other types. 
    xhr.timeout = 60000;//milliseconds until timeout fires. (1 minute) 
    xhr.onload = function(e2){ 
    var blob = xhr.response; 
    //handle response data 
    } 
    xhr.ontimeout = function(){ 
    //if you get this you probably should try to make the connection again. 
    //the browser should've killed the connection. 
    } 
    xhr.open('GET', "/path/to/URL.cmd?param1=val1&param2=val2", true); 
    xhr.send(); 

Я считаю, что атрибут timeout является ключом к созданию длинные-опросы работают, больше видеть spec есть больше информации о responseType в том же документе. Если таймаут не указан, значение по умолчанию равно нулю.

+0

Так что это для ответа, который я уже прочитал, но я хочу знать, как я смогу отправить данные по xhr, когда мое приложение будет готово к данным, например, многократно вызывает xhr.send (data) или это невозможно? (так что мне нужно будет открыть новый xhr каждый раз, когда у меня есть данные или очередь, данные eland отправляют его очень x секунд). Так как в узле, где я могу позвонить .write несколько раз и после его вызова .end – MarijnS95

+0

Возможно, я размышлял. Я никогда не играл с этим, но есть частичное состояние '(xhr.readyState == 3)' Я не слишком разбираюсь в его реализации. что есть [arrayBuffer, называемый отзывчивым телом] (http://www.w3.org/TR/2014/WD-XMLHttpRequest-20140130/#response-entity-body), который может содержать частичные данные до состояния readyState готово. Таким образом, вы можете выполнять вызов .write с сервера несколько раз и читать и обрабатывать в частичных сегментах. Вы можете увеличить тайм-аут ms, вызвать тот же запрос 'ontimeout' –

+0

Это то, что уже возможно, я имею в виду, когда XHR открыт (когда ни один из них не закрыл его/не закончил), я могу вызывать .write несколько раз на * * сервер **, но мой вопрос: как мне это сделать с ** клиентом **. – MarijnS95

Смежные вопросы