回调函数及返回Json的三种方法

回调函数及返回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>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值