如何使用一个ajax请求从java servlet返回多个json对象
Posted
技术标签:
【中文标题】如何使用一个ajax请求从java servlet返回多个json对象【英文标题】:how to return multiple json objects from java servlet using one ajax request 【发布时间】:2011-08-20 21:16:02 【问题描述】:我正在使用 jsp 和 servlet 构建 Web 应用程序,我从 jsp 发送 ajax 请求,我想从 servlet 返回两个 json 对象。我尝试执行以下操作,但代码不起作用。
//在jquery中我写了这段代码
var id = $(this).attr('id');
var paramenters = "param":id;
$.getJSON("MyServlet", paramenters, function (data1,data2)
$("h3#name").text(data1["name"]);
$("span#level").text(data1["level"]);
$("span#college").text(data2["college"]);
$("span#department").text(data2["department"]);
);
//在servlet中我写了这段代码
String json1 = new Gson().toJson(object1);
String json2 = new Gson().toJson(object2);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().write(json1);
response.getWriter().write(json2);
谁能帮帮我???
【问题讨论】:
【参考方案1】:你应该这样做:
服务器端:
String json1 = new Gson().toJson(object1);
String json2 = new Gson().toJson(object2);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
String bothJson = "["+json1+","+json2+"]"; //Put both objects in an array of 2 elements
response.getWriter().write(bothJson);
客户端:
$.getJSON("MyServlet", paramenters, function (data)
var data1=data[0], data2=data[1]; //We get both data1 and data2 from the array
$("h3#name").text(data1["name"]);
$("span#level").text(data1["level"]);
$("span#college").text(data2["college"]);
$("span#department").text(data2["department"]);
);
希望这会有所帮助。干杯
【讨论】:
【参考方案2】:将它们包装在 JSON 数组中:
[ .., .., ..]
或者,将它们包装在另一个对象中:
"result1":.., "result2":..
【讨论】:
【参考方案3】:您可以返回一个 JSON 数组,其中两个对象都作为数组的元素。让您的 servlet 返回具有如下结构的 JSON:
["name": "object1", "name": "object2"]
那么你的javascript代码可以是这样的:
$.getJSON("MyServlet", paramenters, function (data)
var data1 = data[0];
var data2 = data[1];
$("h3#name").text(data1["name"]);
$("span#level").text(data1["level"]);
$("span#college").text(data2["college"]);
$("span#department").text(data2["department"]);
);
【讨论】:
【参考方案4】:您将需要像这样将两者都放入一个 json 字符串中
response.getWriter().write("[");
response.getWriter().write(json1);
response.getWriter().write(",");
response.getWriter().write(json2);
response.getWriter().write("]");
这会将它们放入一个 json 数组中
你也可以把它们放在一个 json 对象中
response.getWriter().write("\"object1\":");
response.getWriter().write(json1);
response.getWriter().write(",\"object2\":");
response.getWriter().write(json2);
response.getWriter().write("");
【讨论】:
【参考方案5】:@Edgar 的回答对我有用。但我认为我们应该避免自己形成数组,所以我建议使用列表。代码将是这样的:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
...
resp.setContentType("application/json");
resp.setCharacterEncoding("utf-8");
ArrayList<Object> obj_arr = new ArrayList<Object>();
obj_arr.add(obj1);
obj_arr.add(obj2);
Gson gson = new Gson();
String tmp = gson.toJson(obj_arr);
resp.getWriter().write(tmp);
而在前端,对于我们得到的数据,我们可以使用data[0]
来检索obj1
和data[1]
来检索obj2
。代码将是这样的(我在这里使用 ajax):
$('#facts_form').submit(function (e)
e.preventDefault();
var data = new FormData(this);
var url = 'import';
$.ajax(
url: url,
type: "POST",
data: data,
processData: false,
contentType: false,
async: false,
cache: false,
success: function (data)
for (var i = 1; i < data.length; i++)
//do whatever
,
error: function (xhr, status, error)
alert(status + "\n" + error);
);
);
【讨论】:
以上是关于如何使用一个ajax请求从java servlet返回多个json对象的主要内容,如果未能解决你的问题,请参考以下文章