在Laravel中将JSON错误消息作为“错误”对象返回

时间:2017-09-10 03:29:25

标签: php jquery json ajax laravel

我正在尝试使用JQuery的“Bootstrap File-input”插件来使用AJAX上传文件。该插件期望在名为“error”的JSON密钥中收到错误消息,如下所示:

{error: 'You are not allowed to upload such a file.'}

所以我在“Handler”类的“Render”方法中编写了我自己的异常处理代码:

public function render($request, Exception $exception){

    $err_code = $this->getExceptionHTTPStatusCode($exception);

    $data = [
        "error" => "Internal Server error.",
        "exception" => $exception->getMessage()
    ];

    if ($exception instanceof ValidationException){
        $data['error'] = "Wrong input data";
        $data['error_list'] = $exception->getResponse()-> getOriginalContent();
        $err_code = 422;
    }

    if ($request->expectsJson()) {

        return response()->json(
            $data, 
            $err_code
        );

    }

    return parent::render($request, $exception);
}

但是,不是按预期收到数据,而是将数组的内容放在“responseText”键值中(并且它也作为字符串转义):

{"readyState":4,"responseText":"{\"error\":\"Wrong input data\",\"exception\":\"The given data failed to pass validation.\",\"error_list\":{\"logotipo\":[\"Logotipo field is mandatory\"]}}","responseJSON":{"error":"Wrong input data","exception":"The given data failed to pass validation.","error_list":{"logotipo":["Logotipo field is mandatory."]}},"status":422,"statusText":"Unprocessable Entity"}  

我想知道我是否可以将另一个键和值放在与“responseText”相同的级别,就像“JSONResponse”一样(我不知道它是如何工作的,但它似乎附加了Laravel的Validator)但作为JSON对象,而不是String。我知道我可以使用JQuery解析字符串,但“Bootstrap File Input”插件期望它作为JSON,我无法修改其代码。

我也试过使用Vue.js资源插件,但看起来它以不同的方式读取响应,因此我的“responseText”对象被称为“body”和“bodyText”,它们具有相同的内容。我不知道为什么我会得到重复的响应,一个是转义字符串,一个是JSON。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果我没有错,你试图使用ajax提交带有文件输入的表单。为此,我可以为您分享以下链接,这些人已经解决了同样的问题。

Laravel 5 Ajax File/Image Upload

AJAX file upload in laravel

Laravel 5 Ajax File/Image Upload

可能这可以为你提供一些帮助。