2013-04-06 4 views
0

Я только начал использовать [select2] [1], и я работаю над проектом, которому нужен список тегов (например, на StackOverflow), который заполняется из источника данных JSON. Я использую пример, найденный по этому вопросу: [Tagging With Ajax In Select2] [2], но у меня возникают проблемы с его работой.select2 Tagging with JSON

 // Testing JSON load 
     $("#testJsonLoad").select2({ 
      tags: true, 
      tokenSeparators: [",", " "], 
      createSearchChoice: function (term, data) { 

       if ($(data).filter(function() { 
        return this.text.localeCompare(term) === 0; 
       }).length === 0) { 
        return { 
         id: term, 
         text: term 
        }; 
       } 
      }, 
      multiple: true, 
      ajax: { 
       url: 'data.json', 
       dataType: "json", 
       data: function (term, page) { 
        return { 
         q: term 
        }; 
       }, 
       results: function (data, page) { 
        return { 
         results: data 
        }; 
       } 
      } 
     }); 

Только для целей тестирования на странице data.json имеет эти данные в нем:

{ 
"data": [ 
    { "id" : 1, "text" : "Alabama" }, 
    { "id" : 2, "text" : "Alaska" }, 
    { "id" : 3, "text" : "Arizona" }, 
    { "id" : 4, "text" : "Arkansas" }, 
    { "id" : 5, "text" : "California" }, 
    { "id" : 6, "text" : "Colorado" }, 
    { "id" : 7, "text" : "Connecticut" }, 
    { "id" : 8, "text" : "Delaware" }, 
    { "id" : 9, "text" : "District of Columbia" }, 
    { "id" : 10, "text" : "Florida" }, 
    { "id" : 11, "text" : "Georgia" }, 
    { "id" : 12, "text" : "Hawaii" }, 
    { "id" : 13, "text" : "Idaho" } ] 
} 

Моя проблема заключается в том, что я получаю эту ошибку: this.text неопределен - Линия 78

return this.text.localeCompare(term) === 0; 

Я думаю, что это может иметь какое-то отношение к тому, как мой формат JSON отформатирован. Я пробовал несколько разных форматов, и большинство моих исследований в Интернете не дали положительных результатов.

ответ

0

Я нашел этот вопрос. Мне нужно позвонить data.data (в моем пример) в функции результатов АЯКСА

. Пример:

results: function (data, page) { 
       return { 
        results: data.data 
       }; 
      } 
+0

Это не работает для меня ... –

+0

Как выглядит ваш JSON? –

0

Put отладчик раньше, если ($ (данные) .filter (функция() и проверить, что вы получили в $ (данные)

+0

Mine возвращает: '' '[Object {тег = {имя = "Имя тега"}}]' '' –

+1

Это недействительно JSON. это должно быть: {tag: {name: "Имя тега"}} –

+0

Извините, что это только формат, который Firebug сообщал/форматировал вывод. JSON на самом деле правильный, см. Мой ответ ... –

2

результаты ожидают идентификатора и текста узлов в JSON, вы можете сказать свой JSON на вывод результатов с помощью этого п ода имена или указать, какие использовать в JS:

Пример с сайта:

query: function (query) { 
    var data = {results: []}, i, j, s; 
    for (i = 1; i < 5; i++) { 
    s = ""; 
    for (j = 0; j < i; j++) {s = s + query.term;} 
    data.results.push({id: query.term + i, text: s}); 
    } 
    query.callback(data); 
} 
+0

Идентификатор и текст исправлены для меня. Благодаря! – Noobie3001