数据如何从JSON传递到AJAX?

时间:2015-01-16 19:52:44

标签: java javascript jquery ajax json

我在理解这里的逻辑时遇到了困难。好的,我们假设我有一个班级

@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对象来动态填充简单的下拉列表。

3 个答案:

答案 0 :(得分:1)

loadPersons方法中,使用JSONObjectJSONArray类构建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调用中,successfailurecallback函数,当浏览器从服务器获取响应时调用该函数,如果(2XX)失败则执行成功在错误响应的情况下调用,成功函数接受一个参数数据,即JSON,与您在上一步中看到的相同。

然后,当您从服务器接收数据时,它是JSON格式(我想),您必须解析它以将其转换为对象,然后您获取数据并将其设置为html元素。

$('#myId).append('<li><a href="#" PersonId="+Person[i].name+">Test</a></li>');