2012-06-19 34 views
13

這是基於一個問題:Trying to get tag-it to work with an AJAX calljQuery的TAG-IT(自動完成)擷取JSON列表通過AJAX

但上述只是創建了一個錯誤信息「this.source不是一個函數」對我來說。

我想讓這個json列表顯示爲tagit的標記源,通過ajax。下面的代碼:

// Tagit 
$("#tags").tagit({  
    tagSource: function() { 
     $.ajax({ 
      url: "/admin/ajax.php?q=fetch_all_tags", 
      dataType: "json", 
      success: function(data) { 
       console.log(data); 
       return data; 
      } 
     }); 
    }  
}); 

Ajax調用返回:

{"4":"php","2":"html","3":"css"} 

回答

2

此錯誤是由我使用的是舊版本標記它引起的。如果你得到同樣的錯誤,確保您使用的TAG-IT的最新版本

3

你或許應該使用類似的東西,成功的處理程序:

success: function (categoriesList) { 
    response($.map(categoriesList, function (category) { 
     return { 
      label: category.Name + " (ID: " + category.ID + ")", 
      value: category.Name 
     }; 
    })); 
} 

我顯示具有ID和Name屬性類別對象。

17

退房this code可以幫助你

$("#mytags").tagit({ 
    autocomplete: { 
     source: function(request, response) { 
      /*call api*/ 
     } 
    } 
}); 
+0

非常感謝,@rjdmello你的代碼段可以正常使用,並在這裏是最好的答案。 – DccBr

+0

melhor resposta。 – cura

3

我認爲你可以從jQuery UI的覆蓋自動完成方法:

<!-- language: lang-js --> 

$('.tags ul').tagit({ 

    itemName: 'question', 
    fieldName: 'tags', 
    removeConfirmation: true, 
    //availableTags: ["c++", "java", "php", "javascript", "ruby", "python", "c"] 
    allowSpaces: true, 
    // tagSource: ['foo', 'bar'] 
    tagSource: function() { 
     $.ajax({ 
      url: "/autocomplete_tags.json", 
      dataType: "json", 
      data: { 
       term: 'ruby' 
      }, 
      success: function (data) { 
       console.log(data); 
       return data; 
      } 

     }); 
    }, 
    autocomplete: { 
     delay: 0, 
     minLength: 2, 
     source: this.tagSource() 
    } 
}); 
4

,如果你想使用自定義的autocomplete.source應該重寫自動完成源,如Ajax/XHR響應。

例如:

$("#myTags").tagit({ 
    autocomplete: { 
     delay: 0, 
     minLength: 2, 
     source : 'your data response' 
    } 
});