ActionResult在ajax调用中作为错误返回

时间:2016-02-09 19:14:54

标签: javascript ajax xml asp.net-mvc

所以,我试图从我的控制器返回一个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属性。一个有趣的事情是responseText对象的error属性包含我正在寻找的xml

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

由于

1 个答案:

答案 0 :(得分:0)

这是典型问题,其状态为200且responseText具有输出,但这是一个错误。看起来很奇怪,但这是有原因的。

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

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