我在理解这里的逻辑时遇到了困难。好的,我们假设我有一个班级
@RequestMapping(value="/GetPersons", method = RequestMethod.GET)
public void loadPersons(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws IOException {
OutputStream out = response.getOutputStream();
List<Person> persons = personDAO.loadPersons();
Iterator iterator = persons.iterator();
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
while (iterator.hasNext()) {
JSONObject object = new JSONObject();
object.put("name", person.GetName());
jsonArray.add(object);
}
jsonObject.put("data", jsonArray);
OutputStreamWriter writer = new OutputStreamWriter(out);
try {
writer.write(jsonObject.toString());
}finally {
writer.close();
}
}
然后我的index.jsp
中有一个简单的脚本function loadPersons(json) {
var obj = JSON.parse(json);
var Person = obj.data;
for (i = 0; i < myArr.length; i++) {
$('#myId).append('<li><a href="#" PersonId="+Person[i].name+">Test</a></li>');
}
}
$.ajax({
url: "http://localhost:8080/Persons/getPersons",
success: function (data) {
loadPersons(data);
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
所以我的问题是以下......这里的逻辑是什么?如何将JSONObject数据传递给$ .ajax成功和函数。该函数接受一个参数“data”但是会传递什么?来自java的整个getPersons方法或?
这里的要点是通过使用ajax调用json对象来动态填充简单的下拉列表。
答案 0 :(得分:1)
在loadPersons
方法中,使用JSONObject
和JSONArray
类构建JSON对象的Java表示形式,如下所示:
{
"data": [
{
"name": "whatever person.getName() evaluated to"
},
{
"name": "another person.getName() call"
}
]
}
这是在您的servlet的响应中以文本形式发送的JSON数据。
jQuery ajax
函数对此响应执行了额外的工作,最后将其转换为Javascript对象,然后将其作为success
参数传递给data
回调。这个Javascript对象看起来很相似:
{
data: [
{
name: "whatever person.getName() evaluated to"
},
{
name: "another person.getName() call"
}
]
}
您可以使用name
data.data[0].name
的值
答案 1 :(得分:0)
在这种特定情况下,您可以直接在请求的响应中编写JSON字符串内容。这是在以下几行中完成的:
//Obtain the output stream from the response
OutputStream out = response.getOutputStream();
//Wrap the output stream into a writer
OutputStreamWriter writer = new OutputStreamWriter(out);
try {
//write in the writer that will write on the HTTP response
writer.write(jsonObject.toString());
}finally {
//close writer and free resources
writer.close();
}
因此,来自服务器的响应将是包含您的数据的字符串。这来自这些代码:
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
while (iterator.hasNext()) {
JSONObject object = new JSONObject();
object.put("name", person.GetName());
jsonArray.add(object);
}
jsonObject.put("data", jsonArray);
然后,来自jquery的$ .ajax将执行success
中定义的回调函数,其中它从服务器接收响应作为参数:
$.ajax({
//removed code for explanation purposes...
success: function (data) {
//data is the response from the server on a successful execution
//of the HTTP request to the server
//do something here with the response from the server
//in this case, call the loadPersons function
loadPersons(data);
}
});
在loadPersons
函数中,将json字符串中的数据反序列化为JavaScript json对象,然后从那里的json数据创建HTML。
答案 2 :(得分:0)
首先点击任意浏览器上的链接http://localhost:8080/Persons/getPersons,如果您的春季服务当前正在运行,您将在浏览器中看到JSON
数据。 AJAX
内的index.jsp
电话会提取相同的数据。
$.ajax({
url: "http://localhost:8080/Persons/getPersons",
success: function (data) {
loadPersons(data);
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
P.S - 我想你必须在这个ajax调用
中添加以下行 dataType :'json'
在ajax调用中,success
和failure
是callback
函数,当浏览器从服务器获取响应时调用该函数,如果(2XX)
失败则执行成功在错误响应的情况下调用,成功函数接受一个参数数据,即JSON
,与您在上一步中看到的相同。
然后,当您从服务器接收数据时,它是JSON格式(我想),您必须解析它以将其转换为对象,然后您获取数据并将其设置为html元素。
$('#myId).append('<li><a href="#" PersonId="+Person[i].name+">Test</a></li>');