Почему мой JQuery UI Autocomplete возвращает все элементы (из XML) в виде одной длинной строки? - PullRequest
1 голос
/ 02 августа 2011

Я использую автозаполнение jQuery, но он возвращает все записи 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 голосов
/ 02 августа 2011

Ваша проблема

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

text () возвращает внутренний текст ключевого слова ... simples

Вы должны просто вернуть:

value: $( "keyword", this )
0 голосов
/ 02 августа 2011

Вы должны использовать надлежащие инструменты jQuery для обработки XML, что значительно упрощает: -)

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

Также, глядя на ваш код, это выглядит довольно многословно для "простого" автозаполнения. Вы можете взглянуть на это: 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();

Я не проверял это, но я думаю, это должно сработать.

...