我想使用 ajax 在搜索中的文本更改时在 select2 中加载数据,我正在使用以下代码,但它不起作用。控制台中没有错误,并且未调用jquery函数。
jQuery('#t_name').select2({
ajax: {
url: 'get-all_data',
processResults: function (data) {
return {
text: item.text,
id: item.id
};
}
}
});
public function getAllData()
{
$json = [];
$results=$this->db->select('*')->from($this->user)->get()->result_array();
foreach($results as $row)
{
$json[] = ['id'=>$row['id'], 'text'=>$row['name']];
}
return $json;
}
你应该尝试如下:
processResults: function (data) {
return {
results: $.map(data, function (item) {
return {
text: item.NAME,
id: item.ID
}
})
};
}
试试这个
在控制器中
public function getAllData()
{
//if( $this->input->get('q') != '' ){do something}
$json = [];
$results=$this->db->select('*')->from($this->user)->get()->result_array();
foreach($results as $row)
{
$json[] = ['id'=>$row['id'], 'text'=>$row['name']];
}
header('Content-Type: application/json');
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache');
echo json_encode( $json );
}
在你的JavaScript中
$(document).ready(function(){
$(".select2").select2({
minimumInputLength: 2,
ajax: {
url: '<?=base_url()?>/get-all_data',
dataType: 'json',
delay: 250,
processResults: function (data) {
return {
results: data
};
},
cache: false
}
});
}(;
对于使用 ajax 的 select2 需要、JSON 格式的数据以及您在processResults
中犯了一个拼写错误。
请检查下面的代码。
$('.js-data-example-ajax').select2({
ajax: {
url: 'get-all_data',
dataType: 'json',
processResults: function (data) {
return {
results: data
}
}
}
});
PHP代码
public function getAllData()
{
$json = [];
$results=$this->db->select('*')->from($this->user)->get()->result_array();
foreach($results as $row)
{
$json[] = ['id'=>$row['id'], 'text'=>$row['name']];
}
echo json_encode($json);
}
更新
建议:另外,您可以在PHP函数中使用此代码,而无需对日期设置使用for循环。
public function getAllData() {
$results = $this->db->select('id, name as text')->from($this->user)->get()->result_array();
echo json_encode($results);
}
请尝试在您的 ajax url 中添加项目的base_url:
jQuery('#t_name').select2({
ajax: {
url: base_url + 'get-all_data',
processResults: function (data) {
return {
text: item.text,
id: item.id
};
}
}
});