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

时间:2014-09-26 12:00:00

标签: java javascript jquery ajax servlets

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

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

在servlet上,我创建了2个参数的ArrayList<String>并将其发送到Ajax。

您可以在图片中看到数组显示正常。

我不确定如何使用indexOf()功能获取参数,或者我需要使用其他功能。
我也试过get(),但它没有用。
同样使用playerNameAndType [0],它只需打印'['

enter image description here

的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));
        }
    });
}

Servlet(Java)

  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();
        }
    }

6 个答案:

答案 0 :(得分:1)

根据D.T.评论,我修复了它:

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

并正确打印。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

indexof()返回的是您在参数中传递的元素的索引。

playerNameAndType.indexOf("Bob")

会给你0,索引为“Bob”。

示例:

var person = ["Bob", "Human"];
document.write("Hey, " + person[0] + "!! You are first in array.");

答案 3 :(得分:0)

你得到一个对象数组。只需从索引中检索对象即可。

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

答案 4 :(得分:0)

而不是下面的代码

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);

请尝试

currentPlayerNameJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerName());
playerTypeJSON = gson.toJson(engine.GetCurrentPlayer().GetPlayerType().toString());
HashMap<String, String> responseMap = new HashMap<String,String>();
resposeMap.put("name",currentPlayerNameJSON );
resposeMap.put("type",playerTypeJSON );
out.print(responseMap.toString());

在javaScript中你可以

function printStatusPane() {

    $.ajax({
        url: "UpdateStatusPaneServlet",
        timeout: 2000,
        error: function() {
            console.log("Failed to send ajax");
        },
        success: function(playerNameAndType) {
           var json = $.parseJSON(playerNameAndType);    
            $("#currentPlayer").append(json['name']);
            $("#playerType").append(json['type']);
        }
    });
}

答案 5 :(得分:0)

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