Javascript 将Select2与Laravel 4应用程序集成

Javascript 将Select2与Laravel 4应用程序集成,javascript,ajax,laravel,laravel-4,jquery-select2,Javascript,Ajax,Laravel,Laravel 4,Jquery Select2,我已经决定在我的multiselect搜索过滤器中实现select2,我需要一些帮助来集成它 我有以下方法: public function getContactByName($name) { return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like

我已经决定在我的multiselect搜索过滤器中实现select2,我需要一些帮助来集成它

我有以下方法:

public function getContactByName($name)
{
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}
此方法返回“first_name”和“last_name”与URL中输入的术语类似的任何记录,例如{name}

以下路由处理该请求:

Route::get('admin/get-contact-name/{name}', 'AdminContactListController@getContactByName');
这一切都很好。我只是需要一些帮助来设置select2和AJAX。我真的不确定在JS的选项中放什么

我有以下表单字段设置:

<input name="contact_names_value" type="text" class="input-medium contact_names_value" id="contact_names_value">
编辑:好了,伙计们,我想我离这更近了,我想我现在通过select2得到了结果,但是我得到了一个JavaScript错误。这是我到目前为止所拥有的

方法:

public function getContactByName()
{
    $name = Input::get('name');
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}
路线:

Route::get('admin/get-contact', 'AdminContactListController@getContactByName');
选择2 JavaScript:

$('#contact_names_value').select2({
    name: $('.select2-input').val(),
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact' + name,
        dataType: 'json',
        data: function (term) {
            return {
                name: term
            };
        },
        results: function (data) {
            return {results: data};
        },
        dropdownCssClass: 'bigdrop'
    },
});
选择2 JS错误:

Uncaught TypeError: Cannot call method 'toUpperCase' of undefined plugins.js:1549
C plugins.js:1549
a.fn.select2.defaults.formatResult plugins.js:1550
g plugins.js:1549
a.extend.populateResults plugins.js:1549
f.query.callback plugins.js:1549
(anonymous function) plugins.js:1549
a.extend.success plugins.js:1549
c jquery-1.9.1.min.js:3
p.fireWith jquery-1.9.1.min.js:3
k jquery-1.9.1.min.js:5
r

有什么建议吗?

您只需抓取输入框,例如使用jQuery,您可以执行$'contact\u names\u value'或javascript is document.getElementById'contact\u names\u value'

一个应该有效的例子:

$('#contact_names_value').select2(your_value_from_getContactByName_method_here);

希望这会有帮助。

好的,我现在很有魅力

以下是我的JS代码:

$('#contact_names_value').select2({
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact',
        dataType: 'json',
        data: function (term, page) {
            return {
                contact_names_value: term
            };
        },
        results: function (data, page) {
            return {results: data};
        }
    },
    tags: true
});
我不需要'name'变量引用,因为插件处理这个问题并将select/input的值附加到查询字符串中

其次,在我的表单中,我需要将类型设置为“隐藏”,就像以前的文本一样

您还会注意到,我在结果和数据函数中都添加了“page”。我不确定这是否有什么不同

我还添加了“tags:true”,使其像multiselect一样工作

这是我的方法代码:

public function getContactByName()
{
    $name = Input::get('contact_names_value');
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as text')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}
注意,在我的select语句中,我使用DB::raw并将“first_name”和“last_name”字段设置为“text”。我认为这是主要问题之一,因为插件需要“id”和“文本”才能正常工作

我的路线很简单:

Route::get('admin/get-contact', 'AdminContactsController@getContactByName');

谢谢,尽管我不确定如何从中获取值,因为值/术语来自select2字段,然后它应该发送到“admin/get contact name/{name}”上方路由的{name}部分,这将从getContactByName方法中以json的形式获得结果,然后应该发送回select2 JS函数。
Route::get('admin/get-contact', 'AdminContactsController@getContactByName');