Ajax的try-catch块写法是否正确?求技术指导
你的jQuery Ajax上传代码中try-catch的问题及修正
先说说你代码里的几个问题:
- catch语法错误:JavaScript里
catch不需要声明异常类型,正确写法是catch(e),不是catch(Exception e),这么写会直接触发语法报错。 - 中文引号问题:
alert(‘Upload Failed.’);里的引号是中文全角格式,必须改成英文半角的',否则代码执行会出错。 - 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
相关产品推荐
相关产品推荐

