Javascript 将Select2与Laravel 4应用程序集成
我已经决定在我的multiselect搜索过滤器中实现select2,我需要一些帮助来集成它 我有以下方法: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
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');