ajax提交成功后无法跳转页面

转自: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");  
    }  

  

代码示例

猜你喜欢

转载自www.cnblogs.com/zhumengke/p/8863426.html