Livewire文件上传报错Uncaught SyntaxError: Unexpected token < in JSON at position 0
错误原因
- 该报错的核心逻辑是Livewire处理异步文件上传请求时,预期接收后端返回的JSON格式数据,但实际接收到的内容是HTML(开头字符为<,触发JSON解析异常)。
- 代码层面的直接触发点是
Insert方法中使用了dd($this->img)调试代码:dd()函数会直接输出HTML格式的调试内容并终止程序运行,导致Livewire无法生成标准响应结构。 - 其他可能的触发场景:
- 上传文件大小超过PHP配置的
upload_max_filesize、post_max_size限制,后端抛出错误页(HTML格式) - Livewire存储临时上传文件的
storage/app/livewire-tmp目录没有读写权限,生成临时URL时抛出异常页 - 中间件/路由规则拦截了Livewire的异步请求,返回了登录页、404页等HTML内容
- 组件Blade模板存在多个根节点,导致响应结构异常
- 上传文件大小超过PHP配置的
解决方案
- 移除
Insert方法中的dd()代码,异步请求场景禁止使用dd()、dump()这类直接输出HTML的调试函数,你可以改用日志记录调试信息:
public function Insert() { \Log::info('上传文件信息', (array)$this->img); // 后续业务逻辑 }
- 校验PHP上传配置:修改
php.ini中upload_max_filesize和post_max_size参数值大于你要上传的文件大小,修改后重启Web服务/PHP-FPM服务生效。 - 给存储目录赋权:Linux环境执行
chmod -R 755 storage保证storage目录读写权限正常,确认storage/app/livewire-tmp目录存在。 - 确认组件Blade模板只有一个根节点,你的现有模板以
<form>为唯一根节点符合要求,如果你后续修改模板不要新增同级的根元素。 - 生产环境关闭APP_DEBUG模式,同时给文件上传逻辑增加异常捕获,避免异常内容直接输出到前端。
内容的提问来源于stack exchange,提问作者Mohammad reza Golshahi
相关产品推荐
相关产品推荐

