Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ActionResult在ajax调用中作为错误返回_Javascript_Ajax_Xml_Asp.net Mvc - Fatal编程技术网

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(参数)
查看抛出的错误字符串。查看“网络”选项卡中的响应,看看有什么不同。