转自:https://www.cnblogs.com/boycelee/p/6243646.html
问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转。思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可行。那我们的解决方法是什么呢?
原因:这就要从Ajax的原理说起,Ajax实际上就是通过XMLHttpRequest来发送请求对象向服务器发送异步请求,从服务器获取数据,然后使用JS来操作DOM而更新页面。
也就是说,服务器端返回的是纯文本流,可以是xml格式,html格式,js格式,也可以是字符串格式,但总结一句话,客户端获取ajax异步获取结果后,不是直接显示在页面上,而是必须要先由js处理,
完成之后才能显示在页面。
解决办法:
<script type="text/javascript"> $(document).ready(function() { $("#login_user").click(function() { var username = $("#login_account").val(); var pass = $("#login_userPwd").val(); var user = { number : username, password : pass };//拼装成json格式 $.ajax({ type : "POST", url : "http://localhost:8080/iswust2hand/2hand/user/login", data : JSON.stringify(user), contentType : 'application/json;charset=utf-8', dataType : 'json', success : function(data) { if (data.code == '0') { window.location.href = "/iswust2hand/index.jsp"; alert("欢迎使用西科二手平台!"); }else{ alert("密码错误,请确认后重新登录!"); } }, error : function(data) { alert("出错:" + data.code); } }); }); }); </script>
我的解决办法是放弃ajax
$("#search_btn").bind("click", function() { $("#search_form").submit(); }); <form id="search_form" action="${pageContext.request.contextPath}/search" method="post"> <input id="search_text" type="text" name="searchText" placeholder="请输入您要搜索的内容..."> <img id="search_btn" src="${pageContext.request.contextPath}/imgs/search_btn.png"> </form>
服务器的响应数据,分3种情况
转自:https://blog.csdn.net/b_qxzb/article/details/47066317
1、响应数据是结果页面
2、响应数据是json格式的数据
3、响应数据是json格式的数据,然后再重新发出一次请求
注:响应数据要么是结果页面,要么是json格式的数据,否则,结果页面会覆盖掉json格式的数据——从而导致jquery的post的回调函数没有执行,导致struts2没有跳转到结果页面。
响应数据是结果页面
1.响应数据是结果页面,表示跳转到结果页面。
2.业务的应用场景一般是,查(询)数据就是跳转到结果页面。
@InputConfig(resultName = "indexInput") public String index() { return "indexSuccess"; }
响应数据是json格式的数据
1.响应数据是json格式的数据的话,那么肯定不是根据struts2配置文件的结果页面进行跳转——实际上,这个时候也没有配置结果页面,否则会覆盖掉json格式的数据。
2.业务的应用场景是,
1)对数据库进行增、删、改的操作。
2)刷新当前页面的部分数据。
响应数据是json格式的数据,然后在jquery post的回调函数里再重新发出一次请求
//js代码:发出请求 // 遮罩层-注册 function register1(){ // 提交表单 var form = document.getElementById("register"); var param = $("#register").serialize(); $.post(form.action, param, function(json){ if(json.success){ window.location = "registerSuccess.jsp"; //发起一次新的请求 }else{ alert("注册失败!"); } }, "json"); }
代码示例