【问题标题】:An ajax call to a .net web api method with a valid XML response has the responseXML as undefined对具有有效 XML 响应的 .net Web api 方法的 ajax 调用具有未定义的 responseXML
【发布时间】:2016-07-22 22:39:57
【问题描述】:

我有一个 .net web api 方法,当它在浏览器中打开时,它会返回一个有效的 XML (http://localhost:49546/api/Products)

<ArrayOfProductModel><ProductModel><Color>Black</Color><DiscontinuedDate i:nil="true"/><ListPrice>1431.5000</ListPrice><ModifiedDate>2008-03-11T10:01:36.827</ModifiedDate><Name>HL Road Frame - Black, 58</Name><ProductCategoryId>18</ProductCategoryId><ProductId>680</ProductId><ProductModelId>6</ProductModelId><ProductNumber>FR-R92B-58</ProductNumber><SellEndDate i:nil="true"/><SellStartDate>2002-06-01T00:00:00</SellStartDate><Size>58</Size><StandardCost>1059.3100</StandardCost><Weight>1016.04</Weight></ProductModel> </ArrayOfProductModel>

当我尝试使用 AJAX 调用该方法时,data 显示为 [object XMLDocument],但 data.responseXML 未定义,因此我无法处理 XML 响应以将其显示为表格。

<script type="text/javascript">
    $(document).ready(function () {
        getProducts();
    });
    function getProducts()
    {
        $.ajax({
            url: 'http://localhost:49546/api/Products',
            method: 'GET',
            dataType: 'xml',
            //contentType: 'application/xml; charset=utf-8',
            success: function (data) {
                alert("GetProducts successfully");
                showProducts(data);
            },
            fail: function (jqXHR, textStatus) {
                alert("Request failed: " + textStatus);
            }
        })
    }
    function showProducts(data)
    {
        alert(data);
        alert(data.responseXML);
        alert(data.responseText);
        var i;
        var xmlDoc = data.responseXML;
        var table = "<tr><th>Nombre</th><th>ListPrice</th></tr>";
        var x = xmlDoc.getElementsByTagName("ProductModel");

        for (i = 0; i < x.length; i++) {
            table += "<tr><td>" +
            x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue +
            "</td><td>" +
            x[i].getElementsByTagName("ListPrice")[0].childNodes[0].nodeValue +
            "</td></tr>";
        }
        //alert(data);
        document.getElementById("prodTable").innerHTML = table;
    }
</script>

请告诉我有什么遗漏或错误

【问题讨论】:

  • responseText 给你什么?
  • responseText 也未定义!
  • 数据是否也未定义?
  • 数据显示为 [object XMLdocument]
  • 如果你做一个 JSON.stringify(data) 你会得到什么?

标签: javascript .net ajax xml


【解决方案1】:

Web API 将 JSON 作为默认数据类型传回。这就是你在 {"location":null}

中得到的

如果您想传回 XML,请查看这篇文章:WebAPI to Return XML

【讨论】:

  • 根据该链接“WebAPI 将根据您的客户端发送的 Accept 标头自动发送 JSON 或 XML。”我已经使用“accept/datatype”作为“xml”发送了 ajax 请求,所以它应该可以工作。
  • 我也试过用 XML 内容返回一个字符串,但它也不起作用
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2018-03-21
  • 2015-04-17
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多