为啥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错误?的主要内容,如果未能解决你的问题,请参考以下文章

前端调用接口404报错

ajax成功请求到后台,但是前端报404错误

用jquery $.ajax 请求后台老是url %5Bobject%20Object%5D而报404错误,为啥?

jQuery AJAX GET/POST 请求在错误处理程序中返回 404,但从服务器发送了有效响应

当我使用 ajax 发布请求时,为啥在我的 live laravel 项目中显示 404 和 405

处理 Ajax 请求(成功、错误消息)