操作结果在 ajax 调用中作为错误返回

ActionResult returns as an error in the ajax call

本文关键字:错误 返回 调用 结果 ajax 操作      更新时间:2023-09-26

所以,我正在尝试从我的控制器返回一个xml文件:

[HttpGet]
public ActionResult GetXml(int id)
{
    var xmlBytes = _context.GetXml(id);
    if (xmlBytes == null) return View("NotFound");
    return File(new MemoryStream(xmlBytes), "application/xml", "file.xml");
}

这个Action从这个ajax调用中完美地调用:

$.ajax({
    type: 'get',
    url: url,
    success: function(data) {
        window.location = url;
    },
    error: function(error) {  //error.responseText contains the actual xml string!
        alert("failed to download xml");
    }
});

但是,它不是调用success,而是直接转到error属性。一件有趣的事情是,error对象的 responseText 属性包含我正在寻找的xml

有人可以解释我做错了什么,并指出我正确下载 xml 流的正确方向吗?

谢谢

这是状态为 200 且响应文本具有输出的经典问题,但这是一个错误。看起来很奇怪,但这是有原因的。

如果你要看响应XML,你不会看到xml文档,因为由于某种原因,浏览器无法解析它。现在,jQuery自动检测内容类型并看到它是XML,它将响应XML视为空并将其抛入错误状态。如果记录参数,您将看到错误消息。

现在要调试它,您可以从控制台复制响应文本或从网络面板检查响应。把它放到你最喜欢的XML验证器中,看看它是否拾取了错误。常见问题是服务器在响应中插入隐藏字符,这会阻塞解析器或服务器在 xml 文档之前返回垃圾。