Не удается получить в javascript ответ XMLHttpRequest от java-сервера

Вот мой код в javascript

    <script type="text/javascript">
startingListener();
function startingListener() {
  setInterval(function(){
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://localhost:32081/", false);
    xhr.send();           
       var result = xhr.response;
       console.log(result);
     }
  }, 100);
}
</script>

И мой сервер на Java

public static void main (String... args) throws IOException, Exception {
String clientSentence;
     ServerSocket welcomeSocket = new ServerSocket(32081);

     while(true)
     {
        Socket connectionSocket = welcomeSocket.accept();
        BufferedReader inFromClient =
           new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        PrintWriter outToClient = new PrintWriter(connectionSocket.getOutputStream(), true);

        clientSentence = inFromClient.readLine();
        System.out.println("Received: " + clientSentence);
             System.out.println("begin");   
             outToClient.println("fu");
             System.out.println("Received: done");

     }
}

Я просто хочу получить строку ответа в JS и работать с ней дальше.

Поэтому, когда я запускаю сервер и запускаю JS, они подключаются, и я получаю в IDE send() от JS.

После этого я увидел в консоли Java, что начало и конец получено, но в консоли браузера я не увидел никакого ответа, и скрипт просто обработался. Что я делаю неправильно?

спасибо за помощь


person warorc    schedule 26.08.2016    source источник
comment
вы вообще не получаете предупреждений в браузере? вы вообще получаете какие-либо ошибки консоли инструментов разработчика браузера? Вы уверены, что хотите отправлять 10 СИНХРОННЫХ запросов в секунду? http://localhost:32081/ имеет тот же источник, что и веб-страница? серьезно, какие-нибудь ошибки в консоли браузера?   -  person Jaromanda X    schedule 26.08.2016
comment
Я не вижу, как ваш server создает ответ Http, который требуется браузеру.   -  person Scary Wombat    schedule 26.08.2016
comment
@ScaryWombat - разве не так поступил бы outToClient.println? (я предположил, что понятия не имею о java) - хотя, перечитывая код, я понимаю, что вы имеете в виду... в этом нет http вообще, есть ли   -  person Jaromanda X    schedule 26.08.2016
comment
Ни ошибок, ничего. Консоль просто чистая. Я думаю, это просто потому, что я отправляю синхронный запрос.   -  person warorc    schedule 26.08.2016
comment
Нет, это простые ванильные сокеты. Нет заголовков ответа Http или чего-то еще. Как он может иметь статус 200?   -  person Scary Wombat    schedule 26.08.2016
comment
чтобы увидеть этот вопрос и ответ: stackoverflow.com/questions/21607664/   -  person Ying Yi    schedule 26.08.2016
comment
см. stackoverflow.com/a/3732328/2310289   -  person Scary Wombat    schedule 26.08.2016
comment
Нет, мне не нужен Http-сервер, мне нужен простой TCP-сервер, на котором я получил строку в браузере. Но, кажется, у меня есть HTTP-сервер. Спасибо.   -  person warorc    schedule 26.08.2016


Ответы (1)


В вашем клиентском коде отсутствует обработчик изменения состояния, и использование setInterval со 100 мс очень тяжело для сервера. Вот лучший JS. Ваша проблема с JAVA - еще одна проблема. Downvoters: прокомментируйте

function listener() {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "http://localhost:32081/", false);
  xhr.onreadystatechange = function () {
    if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
        console.log(xhr.responseText);
    }
  }
}

listener();

Если вы хотите повторно вызывать слушателя, вы можете сделать

function listener() {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "http://localhost:32081/", false);
  xhr.onreadystatechange = function () {
    if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
        if (xhr.responseText != "done") {
          console.log("server still busy");
          setTimeout(listener,1000); // repeat the call
        }
        else {
          console.log("finally done");
        }
    }
  }
}
person mplungjan    schedule 26.08.2016
comment
Не DV, но где в коде сервера генерируется какой-либо Http? Как он может иметь статус 200? - person Scary Wombat; 26.08.2016
comment
Это другой вопрос. Я занимался только JS :) - person mplungjan; 26.08.2016
comment
спасибо, но меня действительно интересует серверная часть. Потому что сторона JS была написана не мной и отлично работает для кода C #, который я не вижу. - person warorc; 26.08.2016
comment
Конечно. Но у тебя две проблемы. я исправил один - person mplungjan; 26.08.2016
comment
Что с минусом? Комментируйте, если вам есть, что сказать. OP не увидит никакого результата, если не настроен обработчик readystatechange - person mplungjan; 26.08.2016
comment
Я не могу голосовать за и против комментариев. Моя репутация меньше 15. Так что это не я. Я попытался проголосовать за ваш комментарий. - person warorc; 26.08.2016
comment
Я знаю. Возможно, это связано с тем, что вы задаете два вопроса: почему мой сервер не отправляет http-ответ и почему мой браузер его не показывает. я ответил только на один - person mplungjan; 26.08.2016