You need to enable JavaScript to run this app. 为什么通过jQuery ajax调用接口时res.sendFile返回的HTML页面无法渲染?
优惠活动
大模型
产品
解决方案
定价
更多

为什么通过jQuery ajax调用接口时res.sendFile返回的HTML页面无法渲染?

问题原因

  • $.ajax() 发起的是异步HTTP请求,浏览器只会把响应内容返回给JS回调函数,不会自动触发页面渲染逻辑。你之前用location.href = "/products"是让浏览器主动发起整页跳转请求,浏览器收到响应后会自动解析HTML并替换当前页面内容,所以能正常显示。
  • 你当前的代码里第二个AJAX请求没有写success回调,拿到返回的HTML内容后没有做任何插入DOM的操作,自然看不到页面渲染效果。

解决方案

有两种常用方案,可根据你的需求选择:

方案1:保留AJAX传递自定义请求头的能力,手动渲染返回的HTML

如果必须在请求头里带JWT等自定义字段,就用该方案,修改main.js里的第二个AJAX请求逻辑,添加success回调处理返回的HTML:

$.ajax({
    url: "http://localhost:8000/products",
    type: 'GET',
    beforeSend: function (xhr) {
        xhr.setRequestHeader("user", localStorage.getItem("user"));
    },
    // 新增success回调
    success: function(html) {
        // 如果是整页HTML,直接替换当前页面的所有内容
        document.open();
        document.write(html);
        document.close();
        // 如果只是局部渲染,就把HTML插入到指定容器即可,比如:
        // $("#app-container").html(html);
    }
});

方案2:不需要自定义请求头时直接跳转

如果后续不需要在/products请求头里带特殊字段,可以直接删掉第二个AJAX请求,用location.href跳转即可:

if ($("#login-chkbx").is(':checked')){
    location.href = "/products";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:36:04