15

这是一个基于以下问题的问题:Trying to get tag-it to work with an AJAX call

然而,上面只是为我创建了一条错误消息“this.source is not a function”。

我试图通过 ajax 让这个 json 列表显示为 tagit 的标记源。下面的代码:

// 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"}
4

6 回答 6

19

查看此代码可能会对您有所帮助

$("#mytags").tagit({
    autocomplete: {
        source: function( request, response ) {
            /*call api*/
        }
    }
});
于 2012-12-13T05:42:34.297 回答
4

如果您想使用自定义自动完成源,比如 Ajax / XHR 响应,应该覆盖 autocomplete.source。

例如:

$("#myTags").tagit({
    autocomplete: {
       delay: 0,
       minLength: 2,
       source : 'your data response'
    }
});
于 2013-03-09T16:52:39.440 回答
3

您可能应该对成功处理程序使用类似的东西:

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

我正在显示具有 ID 和 Name 属性的类别对象。

于 2012-12-07T16:00:31.310 回答
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()
    }
});
于 2013-03-09T16:47:12.047 回答
2

这个错误是由我使用旧版本的标记引起的。如果您遇到相同的错误,请确保您使用的是最新版本的 tagit

于 2012-06-19T13:08:03.660 回答
0

如果您像我一样是新手并且不理解上述解决方案,这里有一个完整的代码

    $("#mySingleFieldTags").tagit({
      autocomplete: {
        source: function( request, response ) {
          console.log(request);
          $.ajax({
                url: "/autocomplete",
                dataType: "json",
                data: {
                  'search':request.term
                },
                success: function (data) {
                    response($.map(data, function (category) {
                      return {
                          label: category.name,
                        
                      };
                  }));
                }
            });
          }
      }
    });

于 2022-01-23T14:37:49.777 回答