2015-01-08 115 views
0

在網頁上,我使用JQuery向我的servlet發送Ajax調用。Servlet request.getParameter返回null

function sendAjax() { 
      $.ajax({ 
       url: "/AddOrUpdateServlet", 
       type: 'POST', 
       dataType: 'json', 
       data: {"name": "hello world"}, 
       contentType: 'application/json', 
       mimeType: 'application/json', 

       success: function (data) { 

       }, 
       error:function(data,status,er) { 
        alert("error: "+data+" status: "+status+" er:"+er); 
       } 
      });   
     } 

在AddOrUpdateServlet的doPost方法,我有以下代碼:

protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    String name = request.getParameter("name"); 
    if (name == null) 
     System.out.println("null"); 

    /* 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(new Integer(1).toString()); 
    response.getWriter().close(); 
    */ 

} 

我可以看到參數已成功由servlet作爲打印「空」控制檯發送和接收。但爲什麼servlet無法獲取「名稱」參數?

+0

爲什麼你設置'mime類型: '應用/ JSON','? – epascarello

回答

0

因爲您已通過request body of POST中的"name"參數,更多的參數爲JSON類型。

就讓它GET請求,並刪除下面的行

`contentType: 'application/json',mimeType: 'application/json', 

編輯: -下面寫在你的servlet代碼行,你將不得不使用JSON庫,在分析數據的小服務程序(GSON or Jackson) 請參閱: - Stack overflow answer

StringBuffer jb = new StringBuffer(); 
    String line = null; 
    try { 
    BufferedReader reader = request.getReader(); 
    while ((line = reader.readLine()) != null) 
     jb.append(line); 
    } catch (Exception e) { /*report an error*/ } 

    try { 
    JSONObject jsonObject = JSONObject.fromObject(jb.toString()); 
    } catch (ParseException e) { 
    // crash and burn 
    throw new IOException("Error parsing JSON request string"); 
    } 
+0

但我仍然想使用POST而不是GET。怎麼樣? – alextc

+0

更新我的答案,參考http://stackoverflow.com/questions/3831680/httpservletrequest-get-post-data,在這種情況下,你不必改變你的方法。 – RE350

+0

感謝RE350。我想我快到了。但問題是JQuery發送「name = hello + world」而不是原始的JSON數據{「name」:「hello world」}。我認爲它是自動改變的。 – alextc

相關問題