laravel 在laravel中使用ajax调用(Json)自动完成,没有响应
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/39097105/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Autocomplete with ajax call(Json) in laravel, no response
提问by DomainFlag
I have the view:
我有这样的看法:
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/minified/jquery-ui.min.css" type="text/css" />
<script>
$(function()
{
$( "#q" ).autocomplete({
source : "{{ url('search/autocomplete') }}",
minLength: 3,
select: function(event, ui) {
$('#q').val(ui.item.value);
}
});
});
</script>
<input id="q" placeholder="Search users" name="q" type="text" value="">
Controller:
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\NewTheme;
use App\Http\Requests;
use DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use Auth;
use Response;
class SearchController extends Controller
{
public function autocomplete(){
$term = Input::get('term');
$results = array();
// this will query the users table matching the TagName
$queries = DB::table('New_Themes')
->where('TagName', 'like', '%'.$term.'%')
->take(5)->get();
foreach ($queries as $query)
{
$results[] = ['value' => $query->TagName];
}
return Response::json($results);
}
}
And my route:
还有我的路线:
Route::get('search/autocomplete', 'SearchController@autocomplete');
My problem is that when I type more then 3 letters in input tag I don't get anything, which seems that input with q id isn't filled with the values. If I do add the form/action/method thing with submit button the controller works fine, so the problem is in this ajax call which doesn't work properly.
我的问题是,当我在输入标签中输入超过 3 个字母时,我什么也没得到,这似乎带有 q id 的输入没有填充值。如果我确实使用提交按钮添加了表单/操作/方法,则控制器可以正常工作,因此问题在于这个 ajax 调用无法正常工作。
Any thoughts why this isn't working properly(maybe it the ajax call doesn't get properly to route or something like this)?
有什么想法为什么这不能正常工作(也许是 ajax 调用没有正确路由或类似的东西)?
FINAL SOLUTION thanks to stack and Borna:
感谢 stack 和 Borna 的最终解决方案:
View:
看法:
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<input type="text" class="form-control" placeholder="TagName" id="searchname" name="TagName">
<script type="text/javascript">
$('#searchname').autocomplete({
source:'{!!URL::route('autocomplete')!!}',
minlength:1,
autoFocus:true,
select:function(e,ui)
{
$('#searchname').val(ui.item.value);
}
});
</script>
Controller:
控制器:
<?php
namespace App\Http\Controllers;
use \Illuminate\Http\Request;
use App\NewTheme; //Instead of NewTheme, your model name
use Input;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
class Theme extends Controller { //Instead of Theme your own controller name
public function autocomplete(Request $request)
{
$term = $request->term;
$queries = DB::table('New_Themes') //Your table name
->where('TagName', 'like', '%'.$term.'%') //Your selected row
->take(6)->get();
foreach ($queries as $query)
{
$results[] = ['id' => $query->id, 'value' => $query->TagName]; //you can take custom values as you want
}
return response()->json($results);
}
}
Route:
路线:
Route::get('/autocomplete', array('as' => 'autocomplete', 'uses'=>'Theme@autocomplete')); //Instead of Theme your Controller name
回答by Borna
$( "#q" ).autocomplete({
source : "{!!URL::route('search/autocomplete')!!}",
minLength: 3,
select: function(event, ui) {
$('#q').val(ui.item.value);
}
in controller
use return response()->json($results);
instead of return Response::json($results);
在控制器中使用return response()->json($results);
而不是 return Response::json($results);
another code for autocomplete In view
自动完成的另一个代码在视图中
<input type="text" name="searchname" class="form-control" id="searchname" placeholder="search" />
$(document).ready(function () {
$('#searchname').autocomplete({
source:'{!!URL::route('autocomplete')!!}',
// source:"{{ URL::to('autocomplete')}}",
minlength:1,
autoFocus:true,
select:function(e,ui)
{
alert(ui);
}
});
});
in controller
在控制器中
public function autocomplete(Request $request)
{
$term=$request->term;
$data=PaymentInvoice::where('invoice_number','LIKE','%'.$term.'%')->take(10)->get();
//var_dump($data);
$results=array();
foreach ($data as $key => $v) {
$results[]=['id'=>$v->id,'value'=>$v->invoice_number." Project Name: ".$v->project_name." Amount: ".$v->amount];
}
return response()->json($results);
}
In model
在模型中
class PaymentInvoice extends Model
{
//
protected $table='payment_invoice';
protected $fillable=['project_name','invoice_number','date','paid_to','prepared_by','amount','invoice_details_id','created_at'];
}
回答by madhan kumar.R
Route
路线
Route::post('search/autocomplete', 'messagesController@autocomplete');
HTML
HTML
<div class="form-group">
{!! Form::label('To', 'To:', ['class' => 'col-lg-2 control-label']) !!}
<div class="col-lg-10">
{!! Form::text('To', $value = null, ['class' => 'form-control', 'placeholder' => 'To']) !!}
</div>
</div>
script
脚本
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<meta name="csrf-token" content="{{ csrf_token() }}">
<script type="text/javascript">
$(document).ready(function(){
src = "search/autocomplete";
$( "#To" ).autocomplete({
source: function(request, response) {
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: 'POST',
url: src,
data: {
term : request.term
},
success: function(data) {
response(data);
}
});
},
minLength: 3,
select: function(event, ui) {
$('#To').val(ui.item.value);
}
});
});
<script>
Controller
控制器
public function autocomplete(){
$term = Input::get('term');
$results = array();
$queries = DB::table('rusers')
->where('name', 'LIKE', '%'.$term.'%')
->take(5)->get();
foreach ($queries as $query)
{
$results[] = [ 'id' => $query->id, 'value' => $query->name ];
}
return response()->json($results);
}