【问题标题】:Select2 TypeError: b is undefinedSelect2 TypeError: b 未定义
【发布时间】:2017-02-18 12:20:44
【问题描述】:

我正在使用 select2 在下拉列表中显示 ajax 结果,但是当我将数据附加到 select2 时显示错误

TypeError: b is undefined

JS 代码

        var baseurl = $("#baseurl").val();
        $(".myselect").select2({
            placeholder: "Select a inspector",
            allowClear: true,
            ajax: {
                url: baseurl + '/admin/getdata',
                dataType: 'json',
                type: "GET",
                quietMillis: 50,
                data: function (term) {
                    return {
                        term: term.term
                    };
                },
                results: function (data) {
                    var myResults = [];
                    $.each(data, function (index, item) {
                        myResults.push({
                            'id': item.id,
                            'text': item.firstname
                        });
                    });
                    return {
                        results: myResults
                    };
                }
            }
        });

term.term 包含下拉搜索框中输入文本的值。

HTML

  <select class="myselect" style="width: 50% !important">
        <option></option>
        <option value="AL">Alabama</option>
        <option value="WY">Wyoming</option>
        <option value="KY">Kentucky</option>
  </select>

JSON 响应

[{"id":9858,"firstname":"Testing3","status":2,"state":"VA","phone":""},{"id":9857,"firstname":"Testing2","status":2,"state":"VA","phone":""},{"id":9856,"firstname":" david polosky ","status":3,"state":"FL","phone":"(000)000-4141"}]

SELECT2 CDN 链接

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>

PHP 服务器端代码 (LARAVEL)

 $searchtext = $request->get('term');
 $data = Inspector::latest('id')
                ->select('id', 'firstname', 'status', 'state', 'phone')
                ->where('firstname', 'LIKE', '%' . $searchtext . '%')
                ->get()->toArray();
 echo json_encode($data);

感谢任何帮助。

【问题讨论】:

  • PHP 代码在哪里?
  • @RaxWeber 我显示的响应是php代码返回的json响应。
  • @RaxWeber 添加了 PHP 代码。
  • 你能进入结果回调并查看数据吗?
  • @thecodejack 如果我在回调中提醒('anything'),它不起作用。

标签: javascript php jquery laravel select2


【解决方案1】:

在您的 ajax 配置中,您使用结果应该使用 processResults

试试这个

var baseurl = $("#baseurl").val();
    $(".myselect").select2({
        placeholder: "Select a inspector",
        allowClear: true,
        ajax: {
            url: baseurl + '/admin/getdata',
            dataType: 'json',
            type: "GET",
            quietMillis: 50,
            data: function (term) {
                return {
                    term: term.term
                };
            },
            processResults: function (data) {
                var myResults = [];
                $.each(data, function (index, item) {
                    myResults.push({
                        'id': item.id,
                        'text': item.firstname
                    });
                });
                return {
                    results: myResults
                };
            }
        }
    });

【讨论】:

  • 是的..非常感谢.. :)
【解决方案2】:

Aamir@,有时错误会产生误导。如果您从代码中看到,它根本没有对 b 的引用。我相信这一定是由于代码中的错误而从代码之外的方法引发的错误。

您可能必须通过单击浏览器控制台上的行号来设置断点,然后检查调用堆栈以查找代码中的错误。

【讨论】:

  • 我不明白这里的否决票。请问这是怎么回事?
  • 抱歉,我没有投反对票。我的文件中除了select2代码没有其他js代码。
  • 这正是我的意思。控制台错误有时会产生误导。您可能遇到了一些问题,可能是选项使用错误/数据访问不正确,这在第一次运行时显然无法识别。在这种情况下,您需要从控制台错误中回溯。当它涉及到一些服务器代码时,总是很难弄清楚到底是什么问题,需要反复来回确定那个不那么明显的问题是什么。
  • 即使只有 2 行代码,它也可能会破坏库中的某些内容,由于这 2 行代码中的变量配置错误,可能会以错误的方式解释数据。
  • 是的,对.. 我得到了答案。我应该使用 processresults。请检查上面接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2014-12-17
相关资源
最近更新 更多