You need to enable JavaScript to run this app. 如何通过fetch向ASP.NET Controller传递正确URL并解决JSON解析报错
优惠活动
大模型
产品
解决方案
定价
更多

如何通过fetch向ASP.NET Controller传递正确URL并解决JSON解析报错

问题核心原因

你遇到的Unexpected end of JSON input报错本质是:fetch请求拿到响应后,调用response.json()解析非JSON格式的返回内容失败,通常有两个触发场景:

  • 后台返回的是纯文本、HTML等非JSON格式内容
  • 请求根本没有正确到达控制器,被重定向、拦截后返回了空响应/非JSON响应

修复步骤

1. 修正URL生成逻辑

不要手动拼接查询参数,直接用Url.Action带参数的重载生成标准URL,避免转义、路由规则导致的URL异常,同时HTML的data-*属性统一用短横线命名规范:

<i data-delete-url="@Url.Action("DeleteTag","EditorSections", new { tag = item.Id })" 
   class="bi bi-x-circle-fill w-25 deleteTag">
</i>

2. 修正JS响应解析逻辑

你后台控制器返回的是纯文本"OK",不是JSON格式,所以要把response.json()改为response.text(),同时补充同域认证凭证、错误捕获逻辑:

document.addEventListener('click', function (e) {
    if (e.target && e.target.classList.contains('deleteTag')) {
        e.stopPropagation(); // 阻止冒泡触发bootstrap下拉菜单默认关闭行为
        const getUrl = e.target.dataset.deleteUrl;
        DeleteTag(getUrl, e.target);
    }
});

function DeleteTag(url, target) {
    fetch(url, {
        credentials: 'same-origin' // 携带同域cookie,避免需要登录的接口被拦截
    })
        .then(response => response.text()) // 解析纯文本返回值
        .then(data => {
            console.log(data);
            if (data.trim() === "OK") {
                // 用closest匹配li,比直接找parentNode更稳妥,不受DOM结构微调影响
                target.closest('li')?.remove();
            }
        })
        .catch(err => console.error('删除请求出错:', err));
    return false;
};

可选方案:调整控制器返回格式

如果你希望继续用response.json()解析,只需修改控制器的DeleteTagAction返回值,把原本的return Content("OK")改为return Json("OK")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:54:01