【问题标题】:tag-it autocomplete - codeignitertag-it 自动完成 - codeigniter
【发布时间】:2017-11-11 07:38:40
【问题描述】:

所以我想问一下为什么我的自动完成功能不起作用,我想从控制器内部的数据库中获取数据,但它没有给我结果。这是代码。

JS

$(document).on('show.bs.modal', '#searchmusic', function() {
$('#searchtags').tagit({
    allowSpaces: true,
    placeholderText: 'Search Tags',
    autocomplete: ({
        source: function(request, response) {
            $.ajax({
                url: base_url + '/songtags/search_tags',
                type: "GET",
                success: function(data) {
                    var songtagdata = JSON.parse(data);
                    response($.map(songtagdata, function(key, value) {
                        return {
                            label: value.tag_name,
                            value: value.tag_name
                        }
                        console.log(songtagdata);
                    }));
                },
                error: function(request, status, error) {
                    alert(error);
                }
            })
        },
        minLength: 2
    })
});
});

控制器

    public function search_tags(){
    $song_tags = $this->song_tags_model->get_tags();
    $encode = json_encode($song_tags);
    echo $encode;
    }

【问题讨论】:

  • 您是否返回json 作为响应尝试添加console.log(data); 并在控制台中查看响应不是除json 之外的任何其他内容。虽然我可以看到你在 search_tags 中使用json_encode(),但它是否是 valkid json
  • 嗯。问题是这样的。在我的 console.log 中。它不显示任何内容。猜猜ajax没有运行?
  • 它没有在网络选项卡中显示 ajax 调用?
  • 哦。实际上我正在获取数据。也许只是响应编码错误?
  • 是的,这就是我要说的,它是否返回有效的 json 字符串,tagit 是否需要 taht

标签: php jquery codeigniter autocomplete


【解决方案1】:

您可以尝试以下代码示例,它只是将数据设置为固定对象:

$(document).ready(function () {
    $("#suggest").autocomplete({
        delay: 100,
        source: function (request, response) {
            Promise.resolve(
                [1,2,3,4,5,6]
            )
            .then(function(data){
                console.log(
                  "got data:"
                  ,JSON.stringify(
                    data,
                    undefined,
                    2
                  )
                )
                response(data);
            });
        }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/jquery-ui-git.js"></script>
<input type="text" placeholder="type something ..." id="suggest" />

如果可行,但 ajax 版本不可行,那么问题出在请求或请求格式上,因此您需要使用控制台的输出更新您的答案。

您没有理解该示例,这是应用于您的代码的示例,它不使用 AJAX,而只是根据您期望的 ajax 设置值:

$(document).ready(function () {
    $("#suggest").autocomplete({
        delay: 100,
        source: function (request, response) {
            Promise.resolve(
                `[{"tag_name":"helo"},{"tag_name":"world"}]`
            )
            .then(function(data){
                console.log(
                  "got data:"
                  ,data
                )
                response(
                  JSON.parse(data)
                  .map(
                    item => ({
                      label:item.tag_name
                      ,value:item.tag_name
                    })
                  )
                );
            });
        }
    });
});

可以在here 找到工作示例。如果它在您的页面中不起作用,则可能是 css 问题,如果确实起作用,则您的问题可能是 xhr 问题或响应的格式与您的预期不符。

【讨论】:

  • 它实际上是在控制台中给我结果。
  • @RealRich 更新了我的答案,它应该在控制台中给出一些结果,你错过了重点。提供的示例不依赖于 xhr,因此您可以假装 xhr 返回任何值。如果该示例使用可见的内容更新了您的自动完成,那么您的问题不是 css,而可能是 xhr 问题或您的响应格式。
  • @RealRich 请仔细阅读我的答案:so you'll need to update your answer with the output of the console 那是控制台的输出,您的 xhr 返回的内容,我知道我的脚本返回的内容是我写的。将 console.log 添加到您的代码中并检查输出是什么
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2014-12-18
相关资源
最近更新 更多