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

AJAX调用中使用Async函数出现await语法错误及500错误咨询

问题解答

语法报错原因

你触发Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules报错的核心原因有两个:

  • await关键字只能在被async修饰的函数内部使用,你虽然给外层的getFornecedores函数加了async,但实际写await的位置是$.ajax的success回调函数中,这个回调函数本身没有被async修饰,不符合语法要求。
  • 你加await的所有操作(jQuery选择器查找节点、each遍历节点)都是同步执行的操作,完全不需要用await修饰,属于不必要的错误用法。

正确代码实现

jQuery的$.ajax本身返回Promise对象,搭配async/await使用时不需要写success回调,直接等待请求返回后执行后续逻辑即可,能天然保证请求返回后再填充下拉框,不会出现响应不及时填充失败的问题,正确写法如下:

// 填充供应商下拉框
async function getFornecedores(){
    try {
        // 等待AJAX请求返回结果
        const data = await $.ajax({
            type: 'GET',
            url: web_service_url + "/TM_GetEnt?pEntTp=F",
        });
        const xml_node = $('DocumentElement',data);
        const entnm = [];
        xml_node.find('Tabela>ENTNM').each(function(){
            entnm.push($(this).text());
        });
        xml_node.find('Tabela>ENTCD').each(function(index){
            $(".fornecedor-select").append($("<option>").text(entnm[index]).val($(this).text()));
        });
    } catch (e) {
        console.log( "请求错误", e );
        console.log("请求地址:", web_service_url);
        alert("Erro");
    }
}

// 填充单据类型下拉框
async function getTipoDocumento(){
    try {
        const data = await $.ajax({
            type: 'GET',
            url: web_service_url + "/TM_GetDocTpRecepcao",
        });
        const xml_node = $('DocumentElement',data);
        const doctpds = [];
        xml_node.find('Tabela>DOCTPDS').each(function(){
            doctpds.push($(this).text());
        });
        xml_node.find('Tabela>DOCTPCD').each(function(index){
            $(".documento-select").append($("<option>").text(doctpds[index]).val($(this).text()));
        });
    } catch (e) {
        console.log( "请求错误", e );
        alert("Erro");
    }
}

// 调用两个接口填充下拉框,如果需要等所有下拉框填充完成再执行后续逻辑,可以用Promise.all
Promise.all([getFornecedores(), getTipoDocumento()]).then(() => {
    console.log('所有下拉框填充完成');
});

500 Internal Server Error 排查方案

500错误属于服务端内部错误,和前端语法无关,可按以下方向排查:

  • 打开浏览器控制台「网络」面板,检查请求的URL拼接是否正确,请求参数、请求头是否符合后端接口要求,是否缺少鉴权信息、Content-Type配置是否正确
  • 确认后端接口是否支持跨域请求,请求方式是否为允许的GET类型
  • 确认接口返回的XML格式是否符合你前端解析的结构,避免节点不匹配导致服务端处理异常

内容的提问来源于stack exchange,提问作者Inês Borges

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:00:02