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

Asp.net MVC部署GoDaddy后Ajax删除报JSON解析语法错误求助

解决ASP.NET MVC Ajax删除在GoDaddy服务器上的JSON解析错误

这个问题我在共享宿主部署项目时遇到过好几次,核心原因基本都是部署环境的配置差异,或者服务器返回的内容不是合法JSON导致的。咱们一步步来排查和解决:

先搞清楚服务器到底返回了什么

你看到的Uncaught SyntaxError: Unexpected token T in JSON at position 0错误,说明前端尝试把服务器返回的内容解析成JSON,但实际返回的不是合法JSON(大概率是HTML错误页面,开头字符是T,比如"Timeout"、"The resource..."或者登录页面的HTML)。

先修改你的Ajax错误回调,打印出服务器返回的实际内容:

error: function (xhr) {
    console.log("服务器返回内容:", xhr.responseText);
    alert('错误详情: ' + xhr.responseText);
}

部署后触发删除操作,查看浏览器控制台的输出,这能帮你精准定位问题。

常见问题及解决方案

1. 控制器异常时返回HTML错误页面,而非JSON

你的控制器catch块直接throw ex,这会让ASP.NET返回500错误的HTML页面,前端解析这个HTML自然会报错。修改控制器代码,确保无论成功还是失败都返回JSON:

[Authorize]
[HttpDelete]
public ActionResult Delete(int id) {
    try {
        CourseBl.Delete(id);
        // 返回结构化的JSON对象,比单纯字符串更灵活
        return Json(new { success = true, message = "Deleted Successfully" }, JsonRequestBehavior.AllowGet);
    } catch(Exception ex) {
        // 建议这里记录日志,方便后续排查问题
        return Json(new { success = false, message = "删除失败: " + ex.Message }, JsonRequestBehavior.AllowGet);
    }
}

注意加上JsonRequestBehavior.AllowGet,因为默认情况下ASP.NET MVC不允许在非GET请求中返回JSON(防止JSON劫持)。

2. GoDaddy服务器禁用了DELETE动词

很多共享宿主环境默认禁用PUT/DELETE这类HTTP动词,需要在Web.config的<system.webServer>节点下添加配置,允许DELETE动词:

<system.webServer>
  <!-- 保留原有其他配置 -->
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" 
         path="*." 
         verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
         type="System.Web.Handlers.TransferRequestHandler" 
         preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

3. 前端代码的小优化

  • 你的toastr.error用来显示成功信息,这是个小失误,改成toastr.success更合理;
  • 调整success回调,适配返回的结构化JSON:
success: function (data) {
    if (data.success) {
        deleteCourse(CourseId);
        toastr.success(data.message);
    } else {
        toastr.error(data.message);
    }
},

4. 授权问题导致跳转到登录页面

如果部署后用户没有登录,[Authorize]标签会让服务器跳转到登录页面(HTML内容),前端解析这个HTML就会报错。确保测试时用户已经登录,或者如果这个接口不需要授权,暂时去掉[Authorize]测试是否正常。

总结

先通过打印xhr.responseText确定服务器返回的内容,然后根据返回结果对应上面的解决方案。最常见的原因就是DELETE动词被禁用,或者异常时返回HTML而不是JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:10:44