2011-08-10 53 views
-2

嗨,我送一個AJAX調用服務器這樣緩衝閱讀器返回NULL

$.ajax({ 
    type: 'POST', 
    url: "...", 
    dataType:'json', 
    data:JSON.stringify(contact), 
    success:function(){ 
     alert("success") 
    } 

在服務器我處理這個請求,並試圖從這樣的請求讀取JSON對象。

StringBuilder sb = new StringBuilder(); 
try { 
     BufferedReader br = new BufferedReader(new 
InputStreamReader(request.getInputStream())); 
     String line = null; 
     while ((line = br.readLine()) != null) { 
      sb.append(line); 
     } 
    } catch (IOException e) { 
    } 

但br.readLine()返回null。任何想法爲什麼會發生?

+0

這會給你null,因爲通過'AJAX'它不可能嘗試通過POST按鈕提交。它會工作 –

回答

0

我測試過了,如何使用HTTP請求InputStream沒有問題。請求時,'contact'元素很可能是未定義的。因此它被轉換爲一個空的JSON字符串。 嘗試添加一些固定的文本到'數據'字段,你應該看到它在服務器端工作。

1

因爲您到達了流的末尾。

從JavaDoc中:

返回:包含行的內容,不包括任何 行終止符的字符串,或者爲null如果流的末尾,一直 達到

很可能返回空結果,問題在其他地方。我不知道AJAX請求是作爲請求的主體發送還是作爲POST參數發送。使用request.getParameter(「json」)可能會有幫助,但首先檢查LiveHttpHeaders,瞭解您的瀏覽器如何編碼請求以及哪些參數名稱與數據綁定。在這種情況下,你根本不需要使用readline。

+0

,但它不進入while循環,因爲br.readLine()總是返回null –

+1

是的,因爲你的流總是空的!通過檢查request.getInputStream()。read()返回-1來驗證! – Daniel

+1

您可以嘗試使用wireshark檢查網絡流量。 – hlovdal