Ajax的done与fail回调处理异常问题求助
问题原因
你遇到的问题根源是JavaScript语法错误:在.fail()回调里,你误用了PHP风格的字符串连接符.,但JavaScript中字符串拼接需要用+号。
// 错误写法(照搬了PHP的字符串连接逻辑) $('.error').text(errorMessage . "<br>");
这个语法错误会触发浏览器的脚本异常,直接中断整个JS代码的执行——哪怕是请求成功的场景,脚本也会因为这个错误提前崩溃,导致.done()里的alert完全没机会执行,最终页面只能直接返回原始的JSON响应。
解决方法
把字符串连接符从.改成JavaScript标准的+,同时可以优化一下错误处理的细节(比如兼容响应文本为空的情况):
$(function() { $('.error').hide(); $("#form").on('submit', function(e) { e.preventDefault(); $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ type: 'POST', data: $(this).serialize(), url: '{{ route("admin.categories.store") }}' }) .done(function(data) { $('.error').hide(); alert(data.message.name); // 现在这个测试alert会正常执行了 }) .fail(function(jqXHR) { let errorMessage = jqXHR.responseText || '未知错误'; // 修正字符串拼接符号为+,同时用.html()解析换行标签 $('.error').html(errorMessage + "<br>"); $('.error').show(); }); }); });
额外提一句:你原本用.text()来设置内容的话,<br>会被当成纯文本显示,换成.html()才能让换行标签生效,更符合你的需求。
内容的提问来源于stack exchange,提问作者mbr_uk
相关产品推荐
相关产品推荐

