jQuery AJAX请求返回XML

时间:2012-12-01 13:01:10

标签: jquery xml ajax

<suggestions>
<user>
<![CDATA[ Chris ]]>
</user>
<user>
<![CDATA[ Christina ]]>
</user>
</suggestions>

和js部分

            $.ajax({
                type: "POST",
                url: 'index.php/Suggest/',
                dataType: 'xml',
                data: {username: username},
                success: function(data) {
                    $(data).find('suggestions').each(function(){
                        if ($(this).find('user').text()) {
                            $('#container').html('<div>' + $(this).find('user').text() + '</div>');
                        }
                    });
                },
                error: function(request, status, error) {
                    // will also occur when the user toggles a window and instantly clicks on a link, so don't alert anything
                }
            });

插入

<div>ChrisChristina</div>

但我想要

<div>Chris</div> <div>Christina</div>

3 个答案:

答案 0 :(得分:1)

我认为它会遍历suggestions。相反,它应该迭代user。这是工作代码:

var response = ""+
"<suggestions>" +
"<user>" + 
"<![CDATA[ Chris ]]>" +
"</user>" + 
"<user>" + 
"<![CDATA[ Christina ]]>" + 
"</user>" + 
"</suggestions>";

// This is using the JSFiddle "echo" interface
$.post("/echo/xml/", {"xml": response}, function(data) {
    $(data).find('user').each(function(i, user){
        $("#container").append($("<div>").text($(user).text()));
    });
});​

您可以查看live on JSFiddle

答案 1 :(得分:1)

如果您想添加所有用户,则应使用append代替html

    $(data).find('suggestions').each(function(){
        $(this).find('user').each(function(){
            $('#container').append('<div>' + $(this).text() + '</div>');
        });
    });

答案 2 :(得分:0)

您需要遍历每个user元素。在多个元素上使用text()方法时,会返回所有文本,但方法无法识别添加空格。

$(data).find('suggestions').each(function() {
    var $user=$(this).find('user');
      /* use length to check if user elements exist*/
     if($user.length){
          var user=$user.map(function(){
            return $(this).text();
          }).get().join(' ')

        $('#container').append('<div>' + user + '</div>');
    }
});