4

我正在尝试使用 jQuery 从 Java servlet 或操作中通过 ajax 检索来解析一些数据。这是我最糟糕的一周,一切都很顺利。这是我的 XML 响应:

<ajax-response>
    <response>
        <item>
            <name>ok</name>
            <value>true</value>
        </item>
        <item>
            <name>menuDiv</name>
            <value> Some HTML Menu</value>
        </item>
    </response>
</ajax-response>

我试图只获得“Some HTML”的“menuDiv”值:

$.ajax({
    type: "GET",
    url: basePath+'mostrarMenu.do',
    dataType: "xml",
    success: parseXml
});

function parseXml (xml) {
    var menu = $(xml).find("item");
    menu.each(function(i, value) {
        alert(value[0]);
        if (value == 'menuDiv') {
            alert("Esto es el menudiv:"+value);
        }

        if (( value != null ) || ( value != '') || ( value != ' ')) {
            $('#menuDiv').append(value);
        } 
        else 
            alert ("anda el else");
    });

alert(value[0]);并且if ( value == 'menuDiv') {什么都不返回,最后一个if使菜单可见,但其他项目也是如此,就像一个true出现在漂亮菜单前的单词一样。

任何帮助或建议将不胜感激。谢谢。

编辑2:

使用此功能,现在我得到纯文本(未呈现的 html)和所有“< items >”:

function parseXml (xml) {
        var menu = $(xml).find("item");
        menu.each(function(i, value){
            if(( value != null ) || ( value != '') || ( value != ' ')){
                $('#menuDiv').append($(value));
            } else alert ("anda el else");
        });
     }
    }

我更改了 dataType: 'html' 并且我的菜单是可见的,但我继续尝试在我的 XML 上只选择一个项目,而不是所有项目......

4

1 回答 1

1

第一个问题是,当你这样做时find("item"),返回的是整个子树:

    <item>
        <name>ok</name>
        <value>true</value>
    </item>

因此,您的循环需要更改为:

if ($(value).find("name")[0].innerHTML == 'menuDiv') {
    alert("Esto es el menudiv:"+value);
}

然后可以在中获得值“Some HTML Menu”value.find("value")[0].innerHTML

我在这里没有做任何错误检查(具体来说,我假设find返回一个包含至少一个元素的非空数组),但你可以自己添加它。

于 2012-05-15T15:37:02.767 回答