Java 如何通过Servlet上的JSON将多个参数传递给Ajax

Java 如何通过Servlet上的JSON将多个参数传递给Ajax,java,javascript,jquery,ajax,servlets,Java,Javascript,Jquery,Ajax,Servlets,我的JavaScript代码应该从servlet中获取两个参数: 玩家名称和玩家类型(人类\计算机) JavaScript使用Ajax将请求发送到名为UpdateStatusPaneServlet.java的servlet 在servlet上,我创建了两个参数的ArrayList,并将其发送到Ajax 您可以在图片中看到阵列显示正常 我不知道如何使用indexOf()函数获取参数,或者可能需要使用其他函数。 我还尝试了get(),但没有成功。 同样使用PlayerMeansType[0]它只需打

我的JavaScript代码应该从servlet中获取两个参数:
玩家名称和玩家类型(人类\计算机)

JavaScript使用Ajax将请求发送到名为UpdateStatusPaneServlet.java的servlet

在servlet上,我创建了两个参数的
ArrayList
,并将其发送到Ajax

您可以在图片中看到阵列显示正常

我不知道如何使用
indexOf()
函数获取参数,或者可能需要使用其他函数。
我还尝试了
get()
,但没有成功。
同样使用PlayerMeansType[0]它只需打印
'['

JavaScript

function printStatusPane() {

    $.ajax({
        url: "UpdateStatusPaneServlet",
        timeout: 2000,
        error: function() {
            console.log("Failed to send ajax");
        },
        success: function(playerNameAndType) {
            console.log("GOT ajax: " + playerNameAndType);
            $("#currentPlayer").append(playerNameAndType.indexOf(0));
            $("#playerType").append(playerNameAndType.indexOf(1));
        }
    });
}
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Gson gson = new Gson();
            String currentPlayerNameJSON = "";
            String playerTypeJSON = "";
            Engine engine = (Engine)getServletContext().getAttribute("engine");
            ArrayList<String> JSONRequest = new ArrayList<String>(2);

            currentPlayerNameJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerName());
            playerTypeJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerType().toString());

            JSONRequest.add(currentPlayerNameJSON);
            JSONRequest.add(playerTypeJSON);
            out.print(JSONRequest);

        } finally {
            out.close();
        }
    }
Servlet(Java)

function printStatusPane() {

    $.ajax({
        url: "UpdateStatusPaneServlet",
        timeout: 2000,
        error: function() {
            console.log("Failed to send ajax");
        },
        success: function(playerNameAndType) {
            console.log("GOT ajax: " + playerNameAndType);
            $("#currentPlayer").append(playerNameAndType.indexOf(0));
            $("#playerType").append(playerNameAndType.indexOf(1));
        }
    });
}
  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Gson gson = new Gson();
            String currentPlayerNameJSON = "";
            String playerTypeJSON = "";
            Engine engine = (Engine)getServletContext().getAttribute("engine");
            ArrayList<String> JSONRequest = new ArrayList<String>(2);

            currentPlayerNameJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerName());
            playerTypeJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerType().toString());

            JSONRequest.add(currentPlayerNameJSON);
            JSONRequest.add(playerTypeJSON);
            out.print(JSONRequest);

        } finally {
            out.close();
        }
    }
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
Gson Gson=新的Gson();
字符串currentPlayerNameJSON=“”;
字符串playerTypeJSON=“”;
引擎=(引擎)getServletContext().getAttribute(“引擎”);
ArrayList JSONRequest=新的ArrayList(2);
currentPlayerNameJSON=gson.toJson(engine.GetCurrentPlayer().GetPlayerName());
playerTypeJSON=gson.toJson(engine.GetCurrentPlayer().GetPlayerType().toString());
添加(currentPlayerNameJSON);
添加(playerTypeJSON);
打印(JSONRequest);
}最后{
out.close();
}
}

indexOf
返回数组值的位置。使用键索引获取数组值并附加到id中

playerNameAndType = ["Bob", "Human"];
$("#currentPlayer").append(playerNameAndType[0]);
$("#playerType").append(playerNameAndType[1]);

正如您所说,控制台输出是
[“Bob”,“Human”]
您可以通过索引直接访问它:

$("#currentPlayer").append(playerNameAndType[0]);
$("#playerType").append(playerNameAndType[1]);
返回的是您在参数中传递的元素的索引

playerNameAndType.indexOf("Bob")
将为您提供
0
,索引为“Bob”

例如:
var person=[“Bob”,“Human”];

document.write(“嘿,“+person[0]+”!!您是数组中的第一个。”);
您将获得一个对象数组。只需从其索引中检索对象即可

$("#currentPlayer").append(playerNameAndType[0]);
$("#playerType").append(playerNameAndType[1]);

而不是下面的代码

ArrayList<String> JSONRequest = new ArrayList<String>(2);
currentPlayerNameJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerName());
playerTypeJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerType().toString());
JSONRequest.add(currentPlayerNameJSON);
JSONRequest.add(playerTypeJSON);
out.print(JSONRequest);

您正在从servlet返回一个包含Json对象的ArrayList-“JSONRequest”。请尝试通过
Json.stringify(JSONRequest)
将ArrayList转换为Json。然后,您可以在客户端处理此Json。

下面的D.T.注释修复了它:

  var arrayJson = JSON.parse(playerNameAndType); 
  $("#currentPlayer").append(arrayJson[0]);
  $("#playerType").append(arrayJson[1]);

它正确地打印出来。

您的控制台为PlayerNamedType打印什么?您还可以尝试以下操作吗?var test=[];test=PlayerNamedType;并尝试让测试[0]打印尝试使用json.parse(playerNamedType)将其转换为json,然后使用索引访问它。
var obj=json.parse(playerNamedType);obj[0]
@KumarKailash,当我在控制台上输入playerMeandType时:“[“Bob”,“Human”]”你说你正在接收“[“Bob”,“Human”]”。只需执行$(“#currentPlayer”).append(playerMeandType[0]);$(“#playerType”).append(playerMeandType[1]);不,正如我在我的问题上写的那样,我试过playerMeandType[0]打印“[”但我没有收到“var person=[“Bob”,“John”];“我从servlet接收到一些ArrayList对象,其中包含两个对象,PlayerMeansdType[0]在您对问题的评论中打印“[”,您说控制台输出是
[“Bob”,“Human”]
。不幸的是,CodeRunner不支持java代码!!:(我不能在这里提供可运行的java代码…!!所以我使用一个变量来存储控制台输出的确切内容。不,正如我在回答问题时所写的,我尝试了PlayerMeans[0]打印'['