Javascript ActionResult在ajax调用中作为错误返回
因此,我试图从控制器返回Javascript ActionResult在ajax调用中作为错误返回,javascript,ajax,xml,asp.net-mvc,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"); } 此操作完全是通过此aja
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");
}
此操作
完全是通过此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,responseText有输出,但这是一个错误。看起来很奇怪,但这是有原因的 如果要查看responseXML,您将不会看到xml文档,因为浏览器由于某种原因无法解析它。现在,jQuery自动检测内容类型并将其视为XML,将responseXML视为null并将其抛出错误状态。如果记录参数,您将看到错误消息
现在要调试它,您可以从控制台复制responseText或从网络面板检查响应。将它放入您最喜欢的XML验证器中,然后查看它是否能够识别错误。常见的问题是服务器在响应中插入隐藏字符,这会阻塞解析器或服务器在xml文档之前返回垃圾。尝试在ajax选项中包含:
dataType:“xml”
。尝试将响应更改为:返回内容(xmlBytes,“text/xml”)
第三个参数是错误消息函数(jqXHR、textStatus、errorshown)
。我打赌你的XML是无效的。这就是为什么我要求您记录console.log(参数)
查看抛出的错误字符串。查看“网络”选项卡中的响应,看看有什么不同。