ajax请求不能被中途转发到别的界面,request.getRequestDispatcher("/WEB-INF/jsp/main.jsp").forward(request, response);不行
拦截器的拦截转发也不行,都不会跳转到该页面,在发出ajax请求的页面会接收到一个错误,因为ajax是不会跳转的,当你后面的控制器要发生跳转的适合,便会出现错误返回给界面。
$.ajax({
url:"${pageContext.request.contextPath}/userRegister",
type:"post",
data:JSON.stringify
(
{"username":username,
"password":password,
"registerDate":registerDate
}
),
contentType:"application/json;charset=UTF-8",//表示发送的时候是以json格式发送过去的,url方可以用@RequestBody User user //这个注解来接受request发送过来的对象,json的jar官方jar会自动为你解析出来,//当然你这边要是用字符串接收的话,接收到的便是一个json格式的字符串{“key”,value},类似如此,重点是返回数据到前端时的注意事项
/* dataType:"json", */
success:function(data)
{
/* alert("ajax返回成功"); */
if(data!=null)
{
alert("用户名"+data);
}
}
});
返回时:
@Controller
public class UserController {
UserService userService=new UserServiceImpl();
@RequestMapping(value="/userRegister")
@ResponseBody
public String registerUser(@RequestBody User user,HttpServletRequest request,HttpServletResponse response)
{
HttpSession httpSession=request.getSession();
System.out.println(user.getUsername());
System.out.println(user.getPassword());
System.out.println(user.getRegisterDate());
System.out.println("hello ");
return user.getUsername();//ajax请求的返回结果得加上 @ResponseBody这个注解标签,不然这个字符串便会被springmvc的视图解析器解析成该字符串所代表的网页,并返回该网页的内容作为该ajax请求的数据结果,并不会跳转到该字符串所代表的网页,而且大多数也不必要跳转,因为ajax请求的初衷本来就是局部更新跳转的话便失去了该意义,ajax请求相当于多线程的理解,当你返回的是对象时,ajax请求那边便可以申明 /* dataType:"json", */ 这样申明返回的类型为json类型,jar包会自动为你解析,当你返回的是字符串的时候,你就得把/* dataType:"json", */ 这个注释掉了,因为它解析不了字符串为json对象,这样得话便会出现错误,ajax的交互错误
}
@RequestMapping(value="/userSearch")
@ResponseBody
public List search(@RequestBody String context)
{
System.out.println(context);
JSONObject jsonObject = new JSONObject(context);
String str=jsonObject.getString("context");
System.out.println("传的参 "+str);
List<String> list=new ArrayList<String>();
list=userService.userFind(str);
for(String str1:list)
System.out.println(str1);
return list;
}
}