我正在使用blueimp的jQuery.fileUpload组件来构建使用Laravel 5的应用程序的一部分。表单本身正在按预期工作,但我很难在服务器端进行验证:
Laravel的请求验证处理ajax请求的后端验证,当验证失败时,响应将以HTTP 422
代码发送。
主要问题是blueimp的jQuery.fileUpload不解析包含验证消息的file
(json)数组(doc. link)。相反,它只是使用HTTP 422
代码的标准描述。
你们知道一种方法来覆盖它吗?如何手动解析验证返回的json?或者有没有办法让Laravel返回HTTP 200,即使验证失败了?
以下是一些代码:
Laravel的请求类:
class UploadRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
Log::info("Request de upload");
return [
'file' => 'required|max:1200'
];
}
}
这是我的jQuery.fileUpload初始化脚本:
$(function () {
'use strict';
var jupload = $('#fileupload');
jupload.fileupload({
url: window.location
});
// from http://stackoverflow.com/a/21728472
if (typeof existingfiles !== 'undefined'){
jupload.fileupload('option', 'done').call(jupload, $.Event('done'), {result: existingfiles});
};
});
提前致谢, 肖托。
答案 0 :(得分:0)
几天前我遇到了同样的问题...如果你看一下每个回调中可用的data
对象,你会看到它在另一个对象jqXHR
内(毕竟)我们只处理一个jQuery AJAX调用),它本身就有另一个名为responseJSON
的对象,其中包含一个包含您正在寻找的错误的数组。
来自官方的blueimp docs:
" send方法返回一个jqXHR对象,允许将回调绑定到ajax文件上传请求:"
var jqXHR = $('#fileupload').fileupload('send', {files: filesList})
.success(function (result, textStatus, jqXHR) {/* ... */})
.error(function (jqXHR, textStatus, errorThrown) {/* ... */})
.complete(function (result, textStatus, jqXHR) {/* ... */});
所以现在,你可以做点像......
$('#fileupload').fileupload({
fail: function (e, data) {
var errors = data.jqXHR.responseJSON;
$.each(errors, function (key, value) {
alert(value);
});
}
});
或者更合适:
var jqXHR = data.submit()
.success(function (result, textStatus, jqXHR) {/* ... */})
.error(function (jqXHR, textStatus, errorThrown) {
console.log(data);
var errors = jqXHR.responseJSON;
$.each(errors, function (key, value) {
alert(value);
});
})
.complete(function (result, textStatus, jqXHR) {/* ... */});