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

Ajax的try-catch块写法是否正确?求技术指导

你的jQuery Ajax上传代码中try-catch的问题及修正

先说说你代码里的几个问题:

  1. catch语法错误:JavaScript里catch不需要声明异常类型,正确写法是catch(e),不是catch(Exception e),这么写会直接触发语法报错。
  2. 中文引号问题:alert(‘Upload Failed.’);里的引号是中文全角格式,必须改成英文半角的',否则代码执行会出错。
  3. try-catch无法捕获Ajax错误:哪怕你设置了async: false,外层的try-catch也没法可靠捕获Ajax请求的网络错误、HTTP状态错误(比如404、500)——因为jQuery的Ajax错误不会向外抛出到try-catch的作用域中。

给你两种修正方案:

方案1:保留同步请求(不推荐,会阻塞浏览器)

如果你一定要用同步请求,得在Ajax的error回调里主动抛出错误,才能让try-catch捕获到:

var upload = new FormData($("#video_upload")[0]);

try {
    $.ajax({
        url: "files/video_upload",
        enctype: 'multipart/form-data',
        type: 'POST',
        data: upload,
        async: false,
        success: function (data) {
            $('.filesToUpload').empty();
        },
        cache: false,
        contentType: false,
        processData: false,
        error: function(xhr, status, error) {
            throw new Error(error || status);
        }
    });
} catch (e) {
    alert('Upload Failed.');
    console.error('上传出错详情:', e);
}

方案2:改用异步请求(强烈推荐)

同步请求会卡住浏览器主线程,用户无法进行任何操作,体验极差。建议用jQuery Ajax自带的错误处理机制:

var upload = new FormData($("#video_upload")[0]);

$.ajax({
    url: "files/video_upload",
    enctype: 'multipart/form-data',
    type: 'POST',
    data: upload,
    success: function (data) {
        $('.filesToUpload').empty();
    },
    cache: false,
    contentType: false,
    processData: false
})
.fail(function(xhr, status, error) {
    alert('Upload Failed.');
    console.error('上传出错详情:', error || status);
});

额外提醒:

  • 尽量避免使用async: false,同步请求早已是过时的写法,严重影响用户体验。
  • 加上console.error打印错误详情,方便你调试时定位问题根源。

内容的提问来源于stack exchange,提问作者codinglearn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:54:22