Java 如何通过Servlet上的JSON将多个参数传递给Ajax
我的JavaScript代码应该从servlet中获取两个参数: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使用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]打印'['