在开发中,我们经常会使用到ajax技术进行异步请求,与jquery和json结合的ajax用的特别的多。Ajax并不是一种新的技术,而是js、xml、html/css 等这些web技术的集合,主要应用点就是它的异步交互。
最近几天在做用户注册功能时,有个ajax问题困扰了1天多的时间,可能对它不是太了解,才浪费了我大量的时间。现在把问题的解决过程,以及ajax常用的东西总结一下:
Ajax 的书写格式有javascript ajax和Jquery ajax,js的ajax描述了ajax向后台请求的每一步的过程,它都需要用语句表达出来。这样的写法对于初学者非常有用,可以帮助理解ajax原理。
#Js ajax的写法:
更多内容参考:http://www.w3school.com.cn/ajax/index.asp
#Juery Ajax 的写法就相对简单了,也是比较常用的。
这种使用了回调函数,那么调用这个ajax方法的写法是这样的:
#jquery ajax的其他写法
http get请求
$.get(URL,callback);// url就是ajax请求的服务地址,第二个参数是回调函数
由于http get请求时XMLHttpRequest对象的send方法不起作用,所以$.get也就没有向服务器端传送数据。
http post请求
$.post(URL,data,callback);// data是向服务端发送的参数数据,send只在post请求时有效
#jquery ajax请求action方法
在用户注册时,不仅客户端需要进行验证,服务器端也需要必要的验证,为了提示用户是否注册成功,使用异步请求最合适了。我的项目框架使用的是struts2,所以用户注册的逻辑处理方法就在actin中做了。
【注意】
1使用ajax 请求action方法,那么struts.xml配置文件就没什么作用了,因为是异步请求。
2 acito方法设置返回值为void
【遇到的问题】在action方法中用了if语句进行判断,打算将注册失败,与注册成功的信息发送到客户端,但是在注册失败的逻辑内使用response.getWrite().write(“”);语句返回数据时,总是接收不到,而且注册成功后,不去执行success函数,而执行error函数。
【解决】
1 使用response.getWriter().print("exist");返回给ajax数据
有了这条语句,就表示ajax请求服务端成功,因为服务端返回数据了。
2 ajax的dataType设置为”text”。
这样返回给ajax时就只执行success方法了,而不会去执行error方法,因为每个逻辑都有返回值数据。
3在success方法内,可以根据服务端设置返回的数据,判断注册的成功与失败。
代码如下:
客户端:
服务端:
【error函数的写法】
over