无法从java服务器接收javascript XMLHttpRequest响应

时间:2016-08-26 06:17:03

标签: javascript java xmlhttprequest tcpserver

这是我在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时,它们已经连接,并且我从JS <​​/ p>接收了IDE send()

之后我在Java的控制台中看到开始和收到了,但在浏览器控制台中我没有看到任何答案和脚本刚刚处理。我做错了什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您的客户端代码缺少状态更改处理程序,并且使用100毫秒的setInterval,它在服务器上非常繁重。这是一个更好的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");
        }
    }
  }
}