Laravel - 防止错误显示在控制台中

时间:2015-12-07 17:09:32

标签: php jquery ajax laravel laravel-5

我正在执行ajax请求,如果验证失败,则会向用户显示错误消息。

但是,用户也可以在控制台中看到错误消息。例如,如果用户未在控制台中完成其中一个字段,则显示以下内容:

  

无法加载资源:服务器响应状态为422(不可处理实体)

我不希望他们看到错误。如何防止他们看到这样的错误以及控制台中的其他错误,如501错误和内容。我只是想显示一条警告“发生错误”。我不想在控制台中显示任何内容。

我目前的AJAX代码:

(function ($) {
        $('#settingsForm').submit(function (e) {
            $.ajax({
                type: "POST",
                dataType: 'JSON',
                url: '/settings',
                data: $('#settingsForm').serialize(),
                beforeSend: function () {

                },
                success: function (data) {
                    message(data);
                },
                error: function (data) {

                    if (data.status === 422 ) {

                        var errors = $.parseJSON(data.responseText);
                        errorsHtml = '<div class="alert alert-danger"><ul>';
                        $.each(errors, function (index, value) {
                            errorsHtml += '<li>' + value + '</li>';
                        });
                        errorsHtml += '</ul></div>'
                        $('#status_settings').html(errorsHtml);
                    }

                }
            })
            ;

            e.preventDefault();
        })
        ;
    })
    (window.jQuery);

2 个答案:

答案 0 :(得分:5)

看起来您正在使用Laravel表单请求验证,如果AJAX表单提交,则会发送422状态代码以验证失败以及错误。您现在可以做两件事来更改状态代码并从控制台中删除错误消息(仅在这种情况下):

  1. 覆盖vendor / laravel / framework / src / Illuminate / Foundation / Http / FormRequest.php中的响应函数,并在新函数中将状态代码更改为200。从那里复制函数并将其粘贴到app / Http / Requests / Request.php中的Request类中。 更改以下行

    require_once()

    这样的事情:

    return new JsonResponse($errors, 422);

  2. 不是使用表单请求验证,而是在控制器函数中创建一个Validator实例进行验证,并在验证失败时返回JSON response 200状态代码。

答案 1 :(得分:0)

从您的代码中看起来您使用错误代码422来验证错误。这些错误显示在控制台中。您需要做的就是返回200以获得成功和验证错误。由于验证错误意味着请求成功,因此只有数据出错,因此您应始终使用200代码。

您可以做的是创建另一个变量,如下面的响应,并检查成功消息中的状态(如果成功或出现验证错误)。其他错误代码仍然可以在错误关闭时处理。

success: function (data) {

    if(data.response == 'success')
       message(data);

    else if(data.response == 'validation-error'){
        var errors = $.parseJSON(data.responseText);
        errorsHtml = '<div class="alert alert-danger"><ul>';
        $.each(errors, function (index, value) {
            errorsHtml += '<li>' + value + '</li>';
        });
        errorsHtml += '</ul></div>'
        $('#status_settings').html(errorsHtml);
    }

 },