所以最近我使用Devbridge的jQuery Autocomplete创建了一个自动完成的laravel项目。我试图从数据库中获得建议,但它没有显示任何内容。
Google Chrome控制台显示"语法错误:意外令牌<在jquery.autocomplete.js上:85" Mozilla Firefox控制台显示" SyntaxError:JSON.parse:jquery.autocomplete.js上的意外字符:85"还有一个警告"在jquery-2.0.2.js上传递给getElementById()的空字符串:151"
两个错误都指向功能的最后一行Autocomplete()
transformResult: function (response) {
return typeof response === 'string' ? $.parseJSON(response) : response;
}
这是我在bladeview中的文本输入(transaksi / add):
{{Form::open(array('action' => 'TransactionController@store', 'role' => 'form'))}}
<div class="box-body">
<div class="form-group">
{{Form::hidden('kode_acc')}}
{{Form::label('kode', 'Kode Account') }}
{{Form::text('kode', '', array('class' => 'form-control', 'id' => 'kode'))}}
</div>
///some other inputs
{{ Form::close() }}
路线:
//route autocomplete kode account
Route::get('transaksi/getAccountsAutocomplete',array('uses'=>'AccountController@getAccountsAutocomplete'));
控制器
public function getAccountsAutocomplete(){
$term = Input::get('kode');
$suggestions = array();
$search = DB::query("SELECT *
FROM `accounts`
WHERE `nama` LIKE '%".$term."%')";
foreach($search as $results => $account){
$suggestions[] = array('id'=>$account->id,
'nama'=>$account->nama,
'value'=>$account->id);
}
return Response::json($suggestions);
}
jQuery脚本
$(function(){
$('#kode').autocomplete({
source: function (request, response) {
$.ajax({
url: "{{URL('/getAccountsAutocomplete')}}",
data: {
kode: request.term
},
success: function (data) {
console.log("[SUCCESS] " + data.length + " item(s)");
response(data);
},
});
},
select: function(event, ui){
$('#kode_acc').val(ui.item.id);
}
});
});
- 更新 -
其他信息
从Chrome网络,我发现查询转到了
transaksi/add?query=
实际应该去
transaksi/getAccountsAutocomplete
到达控制器。
我是jQuery和Laravel的新手。对这个问题有什么帮助吗?谢谢。
答案 0 :(得分:0)
在服务器中,您正在发送JSON标头,因此,您可以在jvascript文件中执行以下操作:
$.ajax({
url: "{{URL('/getAccountsAutocomplete')}}",
dataType, "json",
data: {
kode: request.term
},
success: function (data) {
// "data" es a json object. No need convert it
},
});
请参阅属性dataType
,该属性指定了服务器所需的数据类型。但是,您应该调试函数以验证要转换的数据类型:
transformResult: function (response) {
console.log(response);
return typeof response === 'string' ? $.parseJSON(response) : response;
}
为了调试你的路线(也许Javascript ajax url找不到正确的控制器)你可以这样做:
// temporarily disable it
//return Response::json($suggestions);
// try to return a test json object
return Response::json("controller found");
在您的响应中仍然打印html字符,然后控制器未正确路由
在javascript代码中,您不能像以前那样放置PHP代码:
url: "{{URL('/getAccountsAutocomplete')}}",
实现这一目标的一个好方法是在头部创建一个全局javascript变量(必须放在任何javascript脚本之前)。
<script>
var my_app_url = '<?php echo Url::to("/")?>';
</script>
然后,您可以使用此URL执行ajax请求,如:
$.ajax({
url: my_app_url + "/getAccountsAutocomplete",
dataType, "json",
data: {
kode: request.term
},
success: function (data) {
// "data" es a json object. No need convert it
},
});
然后,您的ajax请求应找到您的控制器