簡體   English   中英

讀取Java Servlet中從Ajax發送的JQuery數據

[英]Reading JQuery data sent from Ajax in Java Servlet

這是我的Ajax代碼:

    var myJSONObject = {"bindings": [
                                     {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}]
                             };
    $.ajax({
        url : "ships",
        data : myJSONObject,
        success : function(data){
            GLOBAL.player.startShooting(data);
        },
        error : function(data) {
            console.log("error:", data);
        },
        dataType : "json",
        timeout : 30000,
        type : "post"
    });

這是我的Java Servlet代碼:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    System.out.println("im in PSOT");
    System.out.println(request.getParameter("myJSONObject"));

    StringBuilder sb = new StringBuilder();
    BufferedReader br = request.getReader();
    String str;
    while( (str = br.readLine()) != null ){
        sb.append(str);
    }   
    System.out.println(sb.toString());
    response.setContentType("application/json");
    response.getWriter().write("{\"key\":\"hello\",\"key2\":\"world\"}");
}

Java servlet返回我的Hello World對象,但我無法讀取Java Servlet中的數據控制台打印出以下內容:

im in PSOT
null

最后一行是來自上一個println的空字符串。

我正在使用Tomcat 7

誰能告訴我我做錯了什么以及為什么我無法讀取Java Servlet中的數據_

參數名稱不是myJSONObject 那是JS變量名。 參數名稱是JSON對象中的所有根鍵。 例如

String bindings = request.getParameter("bindings");
// ...

您只需要進一步手動解析它。 您可以使用Google Gson

至於為什么Reader沒有返回任何內容,那是因為請求體只能被讀取和解析一次 任何getParameter()調用都會隱式執行此操作。 所以當你 getReader() getParameter() 之前調用getParameter() ,你將無法通過Reader讀取請求體(同樣適用於其他方式!)。 但無論如何你根本不需要它。 只需使用帶有正確參數名稱的getParameter()

您只需要進一步手動解析它。 您可以使用Google Gson。

至於為什么Reader沒有返回任何內容,那是因為請求體只能被讀取和解析一次。 任何getParameter()調用都會隱式執行此操作。 所以當你在getReader()之前調用getParameter()時,你將無法通過Reader讀取請求體(同樣適用於其他方式!)。 但無論如何你根本不需要它。 只需使用帶有正確參數名稱的getParameter()即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM