我正在尝试使用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。
谢谢。
答案 0 :(得分:2)
如果我没有错,你试图使用ajax提交带有文件输入的表单。为此,我可以为您分享以下链接,这些人已经解决了同样的问题。
Laravel 5 Ajax File/Image Upload
Laravel 5 Ajax File/Image Upload
可能这可以为你提供一些帮助。