Laravel中Ajax请求报错且success函数无法正常工作
Laravel Ajax 请求失败、Success 回调不工作的修复方案
问题代码中的核心错误点及修复:
Done 回调未接收响应参数
原代码中done(function(){...})未接收后端返回的响应数据,导致判断results.status时会抛出未定义错误。修改为:.done(function(results) { if (results.status == "200") { Swal.fire( 'Added!', 'Employee Added Successfully!', 'success' ) fetchAllEmployees(); } });错误回调未正确获取Ajax错误信息
原错误回调里的alert(e)调用的是submit事件的参数,而非Ajax错误对象,无法拿到真实错误原因。修改为:error: function(xhr, status, error) { // 控制台打印详细错误信息便于排查 console.log(xhr.responseJSON); alert('加载失败:' + error); }缺少Laravel CSRF令牌验证
Laravel POST请求必须携带CSRF令牌,否则会返回419错误。在创建FormData后追加令牌:const fd = new FormData(this); fd.append('_token', '{{ csrf_token() }}');按钮状态未重置
请求完成后(无论成功或失败),需将按钮文本恢复原样,避免一直显示"Adding..."。添加always回调:.always(function() { $("#addFile").text('Add'); // 替换为按钮原本的文本 });
修复后的完整脚本:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <script type='text/javascript'> $(function() { // add new employee ajax request $("#insertFile").submit(function(e) { e.preventDefault(); const fd = new FormData(this); fd.append('_token', '{{ csrf_token() }}'); // 追加CSRF令牌 $("#addFile").text('Adding...'); $.ajax({ url: '{{ route('reg.store') }}', method: 'post', data: fd, cache: false, contentType: false, processData: false, dataType: 'json', error: function(xhr, status, error) { console.log(xhr.responseJSON); // 控制台打印详细错误 alert('加载处理错误:' + error); } }).done(function(results) { if (results.status == "200") { Swal.fire( 'Added!', 'Employee Added Successfully!', 'success' ) fetchAllEmployees(); } }).always(function() { $("#addFile").text('Add'); // 恢复按钮文本 }); }); }); </script>
额外排查建议:
- 打开浏览器控制台(F12),查看Network标签下的请求详情,确认响应状态码和返回内容,Laravel的验证错误或异常会在
responseJSON里显示具体信息。 - 确保后端
reg.store路由配置正确,且控制器返回合法的JSON格式(例如return response()->json(['status' => 200]))。
内容的提问来源于stack exchange,提问作者Md. Amin uddin
相关产品推荐
相关产品推荐

