簡體   English   中英

如何將JSP頁面發出的jquery AJAX請求中的JSON數據轉發到servlet頁面?

[英]How to forward JSON data to a servlet page from jquery AJAX request made from a JSP page?

我沒有收到從JSP頁面上的AJAX請求發送的JSON數據。 當我嘗試打印存儲request.getParameterValues(“ json []”)的數組時,出現空指針異常。

我的代碼如下:

HTML:

<form name="form1" method="post" action="dailyWBSupload">
 <button class="btn btn-default btn-rect" type="submit" id="taskstodb">Forward</button>
</form>

jquery / AJAX腳本:

   var form = $('#form1');
        form.submit(function() {
            var json = [1, 2, 3, 4];
            jQuery.ajax({
                type: "POST",
                url: "dailyWBSupload",
                dataType: 'json',
                data: {json: json},
                contentType: 'application/json',
                mimeType: 'application/json',
                success: function(data) {
                    alert('YES!');
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    alert(jqXHR + " - " + textStatus + " - " + errorThrown);
                }
            });
        });

web.xml:

 <servlet>
    <servlet-name>dailyWBSupload</servlet-name>
    <servlet-class>serves.dailyWBSupload</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dailyWBSupload</servlet-name>
    <url-pattern>/dailyWBSupload</url-pattern>
</servlet-mapping>

我的Servlet(dailyWBSupload.java):

public class dailyWBSupload extends HttpServlet {

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //response.setContentType("text/html;charset=UTF-8");

    String[] myJsonData = request.getParameterValues("json[]");
    System.err.println("O/P: " + myJsonData[0]);


}

}

從ajax調用中刪除這兩行:

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

或將內容類型更改為:

contentType: 'application/x-www-form-urlencoded;'

更改后您的ajax調用:

   $.ajax({
           type: "POST",
           url: "AnotherServlet",
           dataType: 'json',
           data: {json: json},         
           success: function(data) {
               alert('YES!');
           },
           error: function(jqXHR, textStatus, errorThrown) {
               alert(jqXHR + " - " + textStatus + " - " + errorThrown);
           }
       });

有關更多詳細信息, 請參見此答案

事實證明,上面的方法是錯誤的,因為即使對它進行了幾次調整,它也一次對我不起作用。 因此,我改變了方法,使用AJAX.updater()方法執行相同的操作。

Javascript:

 $("#taskstodb").click(function() {
                var table = $('#WBStable').tableToJSON(); // Convert the table into a javascript object
                alert(JSON.stringify(table));
                var json = JSON.stringify(table);
                new Ajax.Request('dailyWBSupload', {
                    method: 'get',
                    parameters: {json: json}
                });
            });

Servlet:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    String tabledata = request.getParameter("json");
    System.err.println(tabledata);
    final String JSON_DATA
            = "{" + "  \"geodata\": " + tabledata + "}";
    System.err.println(JSON_DATA);
    final JSONObject obj;
    String taskname;
    String noOfhours;
    try {
        obj = new JSONObject(JSON_DATA);
        final JSONArray geodata = obj.getJSONArray("geodata");
        final int n = geodata.length();
        for (int i = 0; i < n; ++i) {
            final JSONObject taskinfo = geodata.getJSONObject(i);
            taskname = taskinfo.getString("Task");
            noOfhours = taskinfo.getString("No. of Hours");

        }
    } catch (JSONException ex) {
        ex.printStackTrace();
    }

}

暫無
暫無

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

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