2012-06-19 35 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' 
    } 
});