如何从ajax响应中显示原始XML?

时间:2019-11-02 12:45:42

标签: jquery html ajax spring-boot

我有一个返回JSON或XML的API。我正在尝试使用jquery显示来自AJAX调用的原始XML响应。我已经使用JSON.stringify通过JSON响应成功完成了此操作。当我尝试使用XML时,我不确定。

这是我的JQuery AJAX代码:

function fire_ajax_get() {
    $("#btn-list").prop("disabled", true);

    $.ajax({
        type: "GET",
        url: "films",
        accepts: {
            text: "application/xml"
        },
        cache: false,
        success: function (event, xhr) {
            //var json = "<div class=\"alert alert-success\" role=\"alert\">"+ JSON.stringify(data, null, 4) +"</div>";
            var xml = "<div id=\"insert-box\" class=\"alert alert-success\" role=\"alert\">"+xhr.responseXML+"</div>";
            $('#listFilms').html(xml);

            $("#btn-list").prop("disabled", false);
        },
        error: function (e) {
            var feedback = "<div id=\"insert-box\" class=\"alert alert-warning\" role=\"alert\"></div>"
            $('#listFilms').html(feedback);

            console.log("ERROR : ", e);
            $("#btn-list").prop("disabled", false);
        }
    });
}

上面注释掉的行对于JSON(变量名已更改)也很好用,并在HTML div中输出以下内容:

[
    {
        "id": 1,
        "name": "Into The Wild",
        "year": "1997",
        "genre": "Drama/Adventure",
        "director": "Sean Penn"
    },
    {
        "id": 2,
        "name": "Titanic",
        "year": "2007",
        "genre": "Drama/Disaster",
        "director": "James Cameron"
    },
    {
        "id": 3,
        "name": "Rise of the Footsoldier",
        "year": "2008",
        "genre": "Drama/Docudrama",
        "director": "Julian Gilbey"
    }
]

对于XML,我只得到undefined作为输出

如果我将代码更改为

success: function (data) {
        var xml = "<div id=\"insert-box\" class=\"alert alert-success\" role=\"alert\">"+data+"</div>";
        $('#listFilms').html(xml);

        $("#btn-list").prop("disabled", false);
}

然后我得到[object Object], [object Object]...作为输出。

我要做的就是在HTML代码中将原始XML数据作为字符串输出。

像这样

<List>
    <item>
        <id>1</id>
        <name>Into The Wild</name>
        <year>1997</year>
        <genre>Drama/Adventure</genre>
        <director>Sean Penn</director>
    </item>
    <item>
        <id>2</id>
        <name>Titanic</name>
        <year>2007</year>
        <genre>Drama/Disaster</genre>
        <director>James Cameron</director>
    </item>
    <item>
        <id>3</id>
        <name>Rise of the Footsoldier</name>
        <year>2008</year>
        <genre>Drama/Docudrama</genre>
        <director>Julian Gilbey</director>
    </item>
<List>

我要去哪里错了?我已经阅读了jQuery文档(https://api.jquery.com/ajaxSuccess/),看起来我做得正确。我已经搜索了XML.Stringify,但无济于事。

任何提示将不胜感激:)

2 个答案:

答案 0 :(得分:0)

阅读您的问题和有关此问题的评论似乎显示<>字符时出现问题。在Javascript中,您可以通过以下方式实现:

escape('<test>somecontent</test>')

当然,您可以在此处使用自己的XML。

答案 1 :(得分:0)

直接将xml添加到您的Ajax https://api.jquery.com/jquery.ajax/

  

dataType(默认值:Intelligent Guess(xml,json,脚本或html))   类型:字符串您期望从中返回的数据类型   服务器。如果未指定任何内容,则jQuery将尝试根据   响应的MIME类型(在1.4中,XML MIME类型将产生XML   JSON将产生一个JavaScript对象,在1.4脚本中将执行   脚本,其他任何内容都将以字符串形式返回)。可用   类型(结果作为第一个参数传递给您的成功   回调)是:

     

“ xml”:返回可以通过jQuery处理的XML文档。

所以放

dataType:"xml",

不是

 accepts: {
            text: "application/xml"
        },

现在只接受xml

 success: function (xmldata) {

现在,我将展示如何将xml作为文本放入。

function dothings() {
  var jqxhr = $.ajax({
      type: "GET",
      url: "films",
      dataType: "xml",
      cache: false
    })
    .done(function(dataxml, textStatus, jqXHR) {
      var xml = "<div id='insert-box' class='alert alert-success' role='alert'>" + dataxml + "</div>";
      $('#listFilms').text(xml);
      $("#btn-list").prop("disabled", false);
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
      var feedback = "<div id='insert-box' class='alert alert-warning' role='alert'>" + textStatus + "</div>"
      $('#listFilms').html(feedback);
      console.log("ERROR : ", errorThrown);
      $("#btn-list").prop("disabled", false);
    });
}
// just to show the xml ust .text
let x = `<List>
    <item>
        <id>1</id>
        <name>Into The Wild</name>
        <year>1997</year>
        <genre>Drama/Adventure</genre>
        <director>Sean Penn</director>
    </item>
    <item>
        <id>2</id>
        <name>Titanic</name>
        <year>2007</year>
        <genre>Drama/Disaster</genre>
        <director>James Cameron</director>
    </item>
    <item>
        <id>3</id>
        <name>Rise of the Footsoldier</name>
        <year>2008</year>
        <genre>Drama/Docudrama</genre>
        <director>Julian Gilbey</director>
    </item>
<List>`;
$('#listFilms').text(x);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="listFilms">empty</div>