为啥AJAX请求处理成功了,还报404错误?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥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 请求(成功、错误消息)
【中文标题】处理 Ajax 请求(成功、错误消息)【英文标题】:Handling Ajax requests (success, errors messageS) 【发布时间】:2017-07-26 18:14:31 【问题描述】:通常我不太使用 ajax 和 laravel,但在我的 laravel 应用程序中,我需要发出一些 ajax 请求,并处理错误和反馈。我看到了很多材料,但我正在寻找从后端到前端(php 和 js)的正确和最佳方式。
这是我的代码 js:
$(function()
$('.send').click(function(event)
event.preventDefault();
$.ajax(
url: "url('admin/posts/ajax')",
type: "post",
data: 'name':$('#name').val(), 'surname':$('#surname').val(), '_token': $('input[name=_token]').val(),
success: function(data)
console.log("sucess");
);
);
);
</script>
控制器:
public function storeAjax(Request $request)
$validator = Validator::make($request->all(), [
'name' => 'required',
'surname' => 'required'
]);
if ($validator->fails())
return response()->json($validator->messages(), 200);
但是给了我 500 错误,所以希望有人能以最好的方式指导我处理 laravel 和 ajax 之间的请求。
【问题讨论】:
【参考方案1】:这是我如何使用 ajax 在 laravel 中发出 post 请求...
$("#form-id").submit(function(e)
e.preventDefault();
$.ajax(
url: "url", //not the complete url, in your case it would be "admin/posts/ajax"
type: "POST",
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
success: function(data)
console.log("success");
,
error: function(data)
var errors = data.responseJSON;
//print the errors
);
);
以及如何在控制器中处理它
public function store(Request $request)
// Validate the request...
$this->validate($request, [
'name' => 'required',
'email' => 'email|required',
]);
//store data into database
//return some data if required
路线应该是..
Route::post('store', 'YourController@store');
【讨论】:
你在 laravel 控制器上是如何处理的?以上是关于为啥AJAX请求处理成功了,还报404错误?的主要内容,如果未能解决你的问题,请参考以下文章
用jquery $.ajax 请求后台老是url %5Bobject%20Object%5D而报404错误,为啥?
jQuery AJAX GET/POST 请求在错误处理程序中返回 404,但从服务器发送了有效响应