layui upload上传失败但无报错,主因是服务端响应非标准JSON(需含code=0)、Content-Type不为application/json、含BOM/空格/HTML注释;auto默认false需手动调upload();多文件上传data不动态生效,应改用before+FormData;IE下需处理跨域、X-Requested-With及返回格式。
layui upload 上传失败但没报错,done 不触发
常见于表单提交拦截未关闭、response 格式不匹配或服务端返回非 json。layui upload 默认要求后端返回标准 json,且必须含 code 字段(值为 0 表示成功),否则直接跳过 done,进 error 甚至静默失败。
- 检查服务端响应头是否为
Content-Type: application/json - 确认返回体是纯 JSON,不能带 HTML 注释、BOM 或额外空格,例如:
{"code":0,"msg":"上传成功","data":{"src":"/upload/xxx.png"}} - 若用 PHP,确保没开启
output_buffering或提前 echo;Node.js 中避免在 res.json() 前调用 res.write() - 临时加
error回调打印xhr.responseText,看实际返回内容
layui upload 选择文件后不自动上传,要手动点按钮
这是默认行为——auto: false。很多人以为“绑了 upload 就该自动传”,其实 layui 把控制权交给你,适合需要校验文件名、大小或合并表单字段的场景。
- 想自动上传,初始化时显式设
auto: true - 若需先校验再上传,保留
auto: false,在choose回调里手动调obj.upload() - 注意:
choose中拿到的obj.files是 FileList,不能直接传给$.ajax;要用obj.upload()或构造 FormData
layui upload 上传多个文件时,data 参数只传第一个
layui 的 data 是静态对象,在多文件上传中不会为每个文件单独执行。它会被整个附加到每次请求中,但如果你在 choose 里动态改 data,只有最后一次赋值生效。
- 不要在
choose里反复赋值data,比如obj.config.data = {...} - 如需为每个文件带不同参数(如分类 ID),改用
before回调 +FormData手动构造:
before: function(obj){
obj.preview(function(index, file, result){
var formData = new FormData();
formData.append('file', file);
formData.append('category', $('#category').val());
// 然后用原生 fetch 或 $.ajax 发送
});
}
multiple: true),服务端循环处理layui upload 在 IE10/11 下上传卡住或 404
IE 对 FormData 支持较弱,且 layui 2.8+ 默认用 XMLHttpRequest 2 级,IE10/11 需确保服务端允许跨域(如果跨域)、并正确设置 X-Requested-With 头。
- IE 下禁用
headers中自定义字段(如X-Token),IE 会拒绝发送 - 若走 iframe 降级(layui 内部 fallback),确保服务端返回格式是
text/html,且 body 里是纯 JSON 字符串(不能包在<pre>或<script>里) - 路径配置别写相对路径如
./api/upload,IE 有时解析异常,改用绝对路径/api/upload或完整 URL
done 彻底失效,而控制台还不报错。










