typeahead和Taginput:远程提取问题

时间:2017-10-25 08:54:16

标签: javascript c# asp.net-mvc typeahead bootstrap-tags-input

我使用以下脚本从控制器获取所有标记并将其用作预先标记

<script>

    $(function () {

        var substringMatcher = function (strs) {
            return function findMatches(q, cb) {
                var matches, substringRegex; 
                matches = [];
                substrRegex = new RegExp(q, 'i');
                $.each(strs, function (i, str) {
                    if (substrRegex.test(str)) {

                        matches.push({ value: str });
                    }
                });
                cb(matches);
            };
        };     


        var states = (function () {
            var states = null;
            $.ajax({
                'async': false,
                'global': false,
                'url': "../my/GetAllTags",
                'dataType': "json",
                'success': function (data) {
                    states = data;
                }
            });
            return states;
        })(); 

        var tags = $('input.stateinput');
        tags.tagsinput();

        $(tags).each(function (i, o) {
            var taginput = $(o).tagsinput('input');
            taginput.typeahead({
                hint: true,
                highlight: true,
                minLength: 1,
                autoselect: true
            }, {
                    name: 'states',
                    displayKey: 'val',
                    source: substringMatcher(states)
                }).bind('typeahead:selected', $.proxy(function (obj, datum) {                   
                    $(o).tagsinput('add', datum.value);
                    taginput.typeahead('val', '');
                }));
            $(taginput).blur(function () {
                taginput.typeahead('val', '');
            });
        });

    });

</script>

当我加载网站时,我在控制台的控制台中出现错误,当我按任意键时,我得到一个空值的错误(这是显而易见的,因为我无法访问GetAllTags)

enter image description here

我的控制器在哪里

[HttpPost]
public JsonResult GetAllTags()
  {
  List<Models.Tags.MTag> Tag_List = new List<Models.Tags.MTag>();
  Tag_List = GenerateList.GetTags();
  var TAGS = Tag_List;
  return Json(TAGS.Select(t => new { id = t.Tag_id, val = t.Tag_name }), 
  JsonRequestBehavior.AllowGet);
}

我做错了什么?

干杯

仅供参考:如果我直接添加数据,它就可以正常使用 - 例如

 var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California',
      'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii',
      'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky',
      'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan',
      'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska',
      'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York',
      'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon',
      'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota',
      'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington',
      'West Virginia', 'Wisconsin', 'Wyoming'
    ];

1 个答案:

答案 0 :(得分:1)

您在Chrome上的Javascript控制台中看到的错误是因为您尝试使用get请求调用POST,因此它找不到API。试试这个:

$.ajax({
                 type: 'POST'
                'async': false,
                'global': false,
                'url': "../my/GetAllTags",
                'dataType': "json",
                'success': function (data) {
                    states = data;
                }
            });