所以,我试图从我的控制器返回一个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流吗?
由于
答案 0 :(得分:0)
这是典型问题,其状态为200且responseText具有输出,但这是一个错误。看起来很奇怪,但这是有原因的。
如果您要查看responseXML,您将不会看到xml文档,因为浏览器由于某种原因无法对其进行解析。现在jQuery自动检测内容类型并看到它是XML,它将responseXML视为null并将其抛入错误状态。如果您记录参数,您将看到错误消息。
现在要调试它,您可以从控制台复制responseText或检查来自网络面板的响应。将它放入您最喜欢的XML验证器中,看看它是否会发现错误。常见问题是服务器在隐藏字符中插入响应,这会阻塞解析器或服务器在xml文档之前返回垃圾。