回调函数及返回Json的三种方法
1.回调函数:
onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:
属性 |
描述 |
onreadystatechange |
存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState |
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 · 0: 请求未初始化(没有调用send方法) · 1: 服务器连接已建立(socket已连接) · 2: 请求已接收(获取到了参数,没有执行action方法) · 3: 请求处理中(已经在执行action方法,未执行完) · 4: 请求已完成,且响应已就绪(已经响应并且能获取到最终的数据) |
status |
200: "OK"(响应的状态) 404: 未找到页面(未找到页面) |
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
2.返回Json的三种方法
第一种:
@Autowired MyFoodDaoImpl mdi; /** * 原始的输出json方式 * OutPutStream os; * os.write(通过第三方json-lib转换json字符串.getByte()) * @param foodname * @param out * @return * @throws IOException */ @RequestMapping(value="/queryFood",method={RequestMethod.GET,RequestMethod.POST}) public String queryFood(String foodname,OutputStream out) throws IOException{ List<Map<String, Object>> list=mdi.queryAllFood(foodname); JSONArray arry=JSONArray.fromObject(list); String jsonStr=arry.toString(); out.write(jsonStr.getBytes("UTF-8")); return null; }
第二种:
/** * 直接返回 字符数组 +必须写@ResponseBody * 减少流的输出动作代码 * out.write(jsonStr.getBytes("UTF-8")); * @param foodname * @return * @throws IOException */ @ResponseBody @RequestMapping(value="/queryFoodReturn",method={RequestMethod.GET}) public byte[] queryFoodReturn(String foodname) throws IOException{ List<Map<String, Object>> list=mdi.queryAllFood(foodname); JSONArray arry=JSONArray.fromObject(list); String jsonStr=arry.toString(); System.out.println(jsonStr.getBytes("UTF-8")); return jsonStr.getBytes("UTF-8"); }
第三种:
@ResponseBody @RequestMapping(value="/queryFoodList",method={RequestMethod.GET}) public List<Map<String, Object>> queryFoodList(String foodname) throws IOException{ List<Map<String, Object>> list=mdi.queryAllFood(foodname); return list; }
配置消息转换器
<mvc:annotation-driven validator="localValidatorFactoryBean"> <mvc:message-converters> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html</value> <value>application/x-www-form-urlencoded</value> </list> </property> </bean> <!-- 配置返回对应解析成json的消息转换器 --> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html</value> <value>application/x-www-form-urlencoded</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
<!-- 添加jacson的json解析库 配置消息转换器 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.12</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。