如何使用Ajax将Json数组从JSP传递给Servlet [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

Ajax代码段

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();
        } 
ajax jsp servlets
1个回答
1
投票

当您发送数据时,如果您在浏览器开发人员工具“网络”选项卡(在Chrome中)检查资源Form DataEnvironment,您会注意到您的数据将作为数组发送到服务器,如下所示:

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)}并通过request.getParameter("jsonData");将其发送到服务器端并使用任何Json解析器库解析它。

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

© www.soinside.com 2019 - 2024. All rights reserved.