如何使用Ajax将Json数组从JSP传递到Servlet

时间:2017-12-22 19:44:33

标签: ajax jsp servlets

我有一个JSP页面,我在其中向一个将数据作为JSON数组的servlet发送一个AJAX请求。但我在servlet中获得null值。 Request.getParameter()返回null,但是当我尝试使用简单的json对象时,例如数据:{jsonData:'test'}它对我有用。

Ajax Snippet

function updateStatus() {       

    var Url = {

            "Urls" : [

            {
                "Env" : "DEV : CC",
                "Url" : "https://localhost:8081/cc",
                "Status" : "Up",
                "Revision" : ""             
            }, {
                "Env" : "MO : CM",
                "Url" : "https://localhost:8082/ab",
                "Status" : "Up",
                "Revision" : ""             } ]         }


          $.ajax({
             url:'Environment',
             data:{jsonData : Url},
             type:'post',
             cache:false,
             success:function(data){
                alert('Hi');
             },
             error:function(){
               alert('error');
             }
          });

    }

Servlet功能

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try 
        {
            String jsonString = request.getParameter("jsonData");
            JSONArray array = new JSONArray(jsonString);
            for (int i = 0; i < array.length(); i++) {
              String path = array.getString(i);
              System.out.println(path);
            }
        } 
        catch (JSONException e) 
        {
            e.printStackTrace();
        } 

1 个答案:

答案 0 :(得分:1)

当您发送数据时,如果您在浏览器开发者工具&#34;网络&#34;上检查资源Form Data的{​​{1}}。选项卡(在Chrome中),您会注意到您的数据正在按如下方式发送到服务器:

Environment

因此,在这种情况下,您可以分别访问它们中的每一个:

jsonData[Urls][0][Env]:DEV : CC
jsonData[Urls][0][Url]:https://localhost:8081/cc
jsonData[Urls][0][Status]:Up
jsonData[Urls][0][Revision]:
jsonData[Urls][1][Env]:MO : CM
jsonData[Urls][1][Url]:https://localhost:8082/ab
jsonData[Urls][1][Status]:Up
jsonData[Urls][1][Revision]:

但您可以使用request.getParameter("jsonData[Urls][0][Url]"); request.getParameter("jsonData[Urls][1][Env]"); 并通过data:{jsonData : JSON.stringify(Url)}获取它以将有效的Json字符串发送到服务器端并使用任何Json解析器库解析它。

注意:您的json数据被编码为内容类型的键值对:&#34; application / x-www-form-urlencoded &#34;而不是&#34; application / json&#34;。因此,您可以request.getParameter("jsonData");访问它。