You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:25:11