ajax post值到处理页面之后,为啥不能使用header跳转呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax post值到处理页面之后,为啥不能使用header跳转呢相关的知识,希望对你有一定的参考价值。

html页面
<script type="text/javascript">
$(".cityarea").click(function()
var a='北京';
var b='bj';
$.ajax(
type: "POST",
url: "2.php",
data: "a="+a+"&b="+b,
success: function(msg)
alert(msg);

);
);
</script>
2.php页面
<?php
header("Location:http://www.qq.com");
exit;
?>
问题是这样的,
当我从html把数据提交到2.php页面处理之后,再使用header函数,跳转到百度页面。
为什么,返回的信息是弹窗,而不是新窗口打开呢?

参考技术A 把你要跳转的页面response返回到ajax请求页面,然后在请求页面window.location=response就跳转了 参考技术B 得到的response是字符串 而hearder是设置http头 可以用js跳转啊追问

不行,用JS也没有作用,我试过了

为啥AJAX请求处理成功了,还报404错误?

参考技术A 今天遇到了一个很离奇的场景,使用ajax请求后台结果 后台处理成功了页面还报了404错误。\\x0d\\x0a程序员不说话,默默上代码:\\x0d\\x0aJS:\\x0d\\x0a[javascript] view plain copy \\x0d\\x0avar save = function() \\x0d\\x0a $.ajax( \\x0d\\x0a url: urlMap.saveOrUpdateGroupInfo, \\x0d\\x0a type: \'post\', \\x0d\\x0a async: false, \\x0d\\x0a dataType: \'json\', \\x0d\\x0a data: $("#groupInfo").serialize() \\x0d\\x0a ).done(function(res) \\x0d\\x0a console.log(res); \\x0d\\x0a if(res.success) \\x0d\\x0a \\x0d\\x0a else \\x0d\\x0a bootbox.alert(res.msg); \\x0d\\x0a \\x0d\\x0a \\x0d\\x0a ); \\x0d\\x0a \\x0d\\x0a后端:\\x0d\\x0a[java] view plain copy \\x0d\\x0a @RequestMapping(value = "/saveOrUpdate", method = RequestMethod.POST) \\x0d\\x0a public ResponseVo saveOrUpdate(String id, String name, String parentId, String parentName, String operate) \\x0d\\x0a ResponseVo result = new ResponseVo(); \\x0d\\x0a GroupInfo info = new GroupInfo(); \\x0d\\x0a Date now =new Date(); \\x0d\\x0a info.setUpdateTime(now); \\x0d\\x0a try \\x0d\\x0a if(operate.equals("add")) \\x0d\\x0a info.setParentId(Integer.parseInt(parentId)); \\x0d\\x0a info.setName(name); \\x0d\\x0a info.setCreateTime(now); \\x0d\\x0a groupInfoService.addGroup(info); \\x0d\\x0a else if (operate.equals("edit")) \\x0d\\x0a info.setId(Integer.parseInt(id)); \\x0d\\x0a info.setName(name); \\x0d\\x0a info.setParentId(Integer.parseInt(parentId)); \\x0d\\x0a groupInfoService.updateGroup(info); \\x0d\\x0a else if (operate.equals("delete")) \\x0d\\x0a groupInfoService.deleteGroup(Integer.parseInt(id)); \\x0d\\x0a \\x0d\\x0a result.setSuccess(true); \\x0d\\x0a catch (Exception e) \\x0d\\x0a log.error("operate group error."+ JsonUtil.toString(info), e); \\x0d\\x0a result.setSuccess(false); \\x0d\\x0a result.setMsg(e.getMessage()); \\x0d\\x0a \\x0d\\x0a return result; \\x0d\\x0a \\x0d\\x0a \\x0d\\x0a挺奇怪吧?\\x0d\\x0a经分析是请求没有返回状态码,这是因为我用的是SpringMVC框架,前后端使用JSON传递数据,因为返回的是对象,而忘记了添加\\x0d\\x0a@ResponseBody\\x0d\\x0a注解,所以 Spring对我的返回值进行了映射,但是映射结果又对应不到视图,所以返回了404\\x0d\\x0a正常后台代码:\\x0d\\x0a[java] view plain copy \\x0d\\x0a@RequestMapping(value = "/saveOrUpdate", method = RequestMethod.POST) \\x0d\\x0a @ResponseBody \\x0d\\x0a public ResponseVo saveOrUpdate(String id, String name, String parentId, String parentName, String operate) \\x0d\\x0a ResponseVo result = new ResponseVo(); \\x0d\\x0a GroupInfo info = new GroupInfo(); \\x0d\\x0a Date now =new Date(); \\x0d\\x0a info.setUpdateTime(now); \\x0d\\x0a try \\x0d\\x0a if(operate.equals("add")) \\x0d\\x0a info.setParentId(Integer.parseInt(parentId)); \\x0d\\x0a info.setName(name); \\x0d\\x0a info.setCreateTime(now); \\x0d\\x0a groupInfoService.addGroup(info); \\x0d\\x0a else if (operate.equals("edit")) \\x0d\\x0a info.setId(Integer.parseInt(id)); \\x0d\\x0a info.setName(name); \\x0d\\x0a info.setParentId(Integer.parseInt(parentId)); \\x0d\\x0a groupInfoService.updateGroup(info); \\x0d\\x0a else if (operate.equals("delete")) \\x0d\\x0a groupInfoService.deleteGroup(Integer.parseInt(id)); \\x0d\\x0a \\x0d\\x0a result.setSuccess(true); \\x0d\\x0a catch (Exception e) \\x0d\\x0a log.error("operate group error."+ JsonUtil.toString(info), e); \\x0d\\x0a result.setSuccess(false); \\x0d\\x0a result.setMsg(e.getMessage()); \\x0d\\x0a \\x0d\\x0a return result; \\x0d\\x0a

以上是关于ajax post值到处理页面之后,为啥不能使用header跳转呢的主要内容,如果未能解决你的问题,请参考以下文章

Ajax传递路径问题及解决

ajax传值php页面接收处理为json 有值 但返回为null 求解

为啥AJAX请求处理成功了,还报404错误?

ajax中push,在jQuery serialize()或serializeArray()中添加/ push()值到Ajax POST

ajax post请求之后 实现页面跳转和带参数跳转问题

Laravel Ajax没有从表单获取值到Controller