2016-04-21 2 views
0

Я делаю проект с использованием javascript для клиентской стороны и сервлетов для серверной части. Я пытаюсь реализовать способ обновления информации о клиенте в реальном времени. Когда клиент обновляет некоторую информацию в веб-приложении, другие клиенты также будут видеть обновление. Я обнаружил, что длительный опрос - хорошая техника для этого. Это код, который я пытался найти.Длинный опрос с ajax и сервлетами

function poll() { 
     setTimeout(function() { 
     $.ajax({ 
      type: "GET", 
      url: "server", 
      contentType: "application/json", 
      data: { 
       type: "update", 
       card: "string" 
      }, 
      success: function(data) { 
       alert(data); 
      }, 
      error: function(data) { 
       alert('eroor'); 
      }, 
      dataType: "json", 
      complete: poll }); 
     }, 5000); 
} 

Я пытаюсь отправить запрос на сервер каждые 5 секунд и получить ответ с новыми обновлениями. Но во всех скелетных кодах, которые я видел в Интернете, data: не установлен. Не устанавливая его, как бы сервер знал тип запроса, который он получил, поскольку есть и другие типы запросов. Но когда я установил data:, запросы не отправляются от клиента. Но без установки data: запросы отправляются на сервер. Неправильно ли установить data:? Без этого, как я могу сообщить сервлету тип запроса?

Я понимаю, что, как упоминалось в here, длинный опрос - это не то, что я пытаюсь сделать. Но может ли кто-нибудь объяснить, что я должен делать, и где я делаю неправильно.

ответ

0

Поскольку вы делаете запрос GET, значения данных добавляются к URL как параметры URL. Затем ваш сервлет должен использовать request.getParameter("type") и request.getParameter("card") для извлечения информации из запроса.

Если вы считаете, что запрос не отправлен, сначала проверьте консоль на наличие ошибок и посмотрите на панель сетевых коммуникаций в инструментах разработчика вашего браузера.

+0

Я понял, что никакие запросы не отправляются консолью. Когда данные: не установлены, я могу видеть ответы в консоли – user11

+0

@ user11 Видите ли, что ваш браузер пытается отправить запрос? Например. в панели Firebugs Net, см. https://getfirebug.com/wiki/index.php/Net_Panel – wero

+0

@ user11 проверить это. https://api.jquery.com/jquery.get. Вы можете отправить запрос GET вместе с данными, используя $ .get –

0

данные:

вопрос, как установить данные. Если вы хотите отправить json-объект, вам нужно выполнить строчку перед отправкой, как показано ниже.

$.ajax({ 
    url: url, 
    type: "POST", 
    data: JSON.stringify(data), 
    contentType: "application/json", 
    complete: callback 
}); 

Без этого, как бы я позволил сервлет знать тип запроса?

Что вы подразумеваете под этим? знать contentType? Если да, отправьте параметр contentType, как указано выше.

Я понимаю, что, как упоминалось здесь, длительный опрос - это не то, что я пытаюсь сделать. Но может ли кто-нибудь объяснить, что я должен делать, и где я делаю неправильно.

Да. Это не совсем длинный опрос. Так вы отправляете запрос на сервер каждые 5 секунд. В любом случае сервер должен поддерживать длительный опрос.

+0

данные: JSON.stringify (данные) решили проблему. Но как я могу реализовать длительный опрос с сервлетами? – user11

+0

Это то, что вы имеете отношение к серверу. Проверьте следующее. http://stackoverflow.com/questions/8081895/implementing-long-polling-in-an-asynchronous-fashion –