2011-08-10 50 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