为什么我的jQuery UI Autocomplete将所有项目(从XML)返回为一条长行?

时间:2011-08-01 21:48:20

标签: jquery xml jquery-ui jquery-ui-autocomplete

我正在使用jQuery Autocomplete,但它将所有XML条目作为一个列表项而不是一个项/关键字返回

这是我的示例XML

<keywords>
<keyword>Hello</keyword>
<keyword>asdfasd</keyword>
<keyword>fsdgs</keyword>
<keyword>Helqerqlo</keyword>
<keyword>Hello</keyword>
<keyword>Hello</keyword>
<keyword>shjfg</keyword>
<keyword>zcxvv</keyword>
<keyword>Hello</keyword>
<keyword>fjhfhg</keyword>
<keyword>Hello</keyword>
<keyword>fdgs</keyword>
<keyword>gfhdgh</keyword>
<keyword>sdfgsdf</keyword>
<keyword>dfghd</keyword>
<keyword>xvcb</keyword>
<keyword>dfghdgh</keyword>
<keyword>Heldfghdglo</keyword>
</keywords>

和jQuery:

$(document).ready(function(){

            $.ajax({
                url: "xml1.xml",
                dataType: "xml",
                success: function( xmlResponse ) {
                    var data = $( "keywords", xmlResponse ).map(function() {
                        return {
                            value: $( "keyword", this ).text()
                        };
                    }).get();
                    $('#ctl00_MainContentPlaceHolder_txtSchool').autocomplete({
                        source: data,
                        minLength: 0
                    });
                }
            });                

        });

以下是自动填充下拉列表中的唯一选项(所有关键字都拼凑为一个长关键字)

HelloasdfasdfsdgsHelqerqloHelloHelloshjfgzcxvvHellofjhfhgHellofdgsgfhdghsdfgsdfdfghdxvcbdfghdghHeldfghdglo

感谢任何帮助。

谢谢, 托马斯

2 个答案:

答案 0 :(得分:0)

您应该使用正确的jQuery工具来处理XML,这样可以更容易: - )

var data = $(xmlResponse).find("keyword").map(function() {
    return { value: $(this).text() };
}).get(); // by the way, what is this 'get' for?

另外,看一下你的代码,对于一个“简单”的AutoComplete来说,这似乎相当冗长。你可以看一下:http://docs.jquery.com/Plugins/autocomplete

<强>更新

我认为问题在于,.map()是xml的根元素。它们中只有一个,这意味着,您只能从.map()函数中获得一个结果。在jQuery站点的示例中,xml的结构有点不同。所以我试试这个(它与上面基本相同):

var data = $( "keyword", xmlResponse ).map(function() { // changed keywords to keyword
    return {
        value: $( this ).text() // changed $("keyword", this) to $(this)
    };
}).get();

我没有对它进行过测试,但我认为应该这样做。

答案 1 :(得分:0)

你的问题是

value: $( "keyword", this ).text()

text()返回关键字... simples

的innerText

你应该回来:

value: $( "keyword", this )