回调函数及返回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>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
