2016-08-26 64 views
-1

這裏是我的代碼在JavaScript無法從Java服務器的JavaScript XMLHttpRequest的響應接收

<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中開始和完成收到的控制檯看到的,但在瀏覽器控制檯我沒」沒有看到任何剛剛處理的答案和腳本。我做錯了什麼?

謝謝您的幫助

+0

你沒有提醒所有的瀏覽器?你有沒有得到任何瀏覽器開發工具控制檯錯誤?你確定你想每秒發送10個同步請求嗎?是'http:// localhost:32081 /'與網頁的起源相同嗎?嚴重的是,瀏覽器控制檯中的任何錯誤? –

+0

我不明白你的'服務器'是如何創建瀏覽器需要的Http響應的。 –

+0

@ScaryWombat - 是不是'outToClient.println'會做什麼? (我認爲,我對Java沒有任何線索) - 雖然,重新閱讀代碼,我明白你的意思......根本沒有http,是否有 –

回答

0

你的客戶端代碼缺少狀態變化處理程序,並使用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"); 
     } 
    } 
    } 
} 
+0

不是DV,但在服務器代碼中的任何Http正在生成?它怎麼能有200的狀態? –

+0

這是另一個問題。我只處理JS :) – mplungjan

+0

謝謝,但我真的對服務器端感興趣。原因JS方面不是由我編寫的,對於C#代碼非常適用,我無法看到。 – warorc

相關問題