Ajax noobie问题:
我想使用Ajax从数据库中获取结果,并根据用户输入表格的内容显示该行。
我想知道如何做到这一点:
这是我的控制器:
public function pricing()
{
$q = Input::get('term');
if($q && $q != ''){
$searchTerms = explode(' ', $q);
$query = DB::table('pricing');
if(!empty($searchTerms)){
foreach($searchTerms as $term) {
$query->where('unit', 'LIKE', '%'. $term .'%');
}
}
$results = $query->paginate(5);
$results->appends(array('term' => Input::get('q')));
dd($results);
return View::make('layouts.buyresults', compact('results'));
}
}
我的表单就像一个名为“term”和bootstrap类的输入字段。
雄辩的模特
<?php
class Pricing extends Eloquent {
protected $table = 'pricing';
}
基于此,如何设置路线,我目前有:
Route::get('site/where-to-buy', 'HomeController@pricing');
在我的表单中我的操作是一样的,所以如何在不离开页面而不刷新的情况下实现此目的?因此,用户输入一个数字,例如10,它们在DB和ajax请求中匹配,然后拉出该行并在表格中显示。
提前致谢:)
答案 0 :(得分:0)
如果您想拥有动态表,可以考虑使用datatables
之类的插件。该插件还提供搜索,排序和过滤选项。如果使用插件不是一个选项,您可以监听input
相关事件并使用jQuery实用程序函数向服务器发送Ajax请求( datatables也使用场景背后的jQuery的ajax方法) :
$('#theInput').on('keyup', function() {
$.get('url', { term: $.trim(this.value) }, function(data) {
if (data.count > 0) {
// appending the rows, `html` overwrites the tbody's existing rows
$('#theTable tbody').html(data.view);
} else {
// Nothing found, notify the user
}
}, 'json');
});
此请求期望获取其中包含view
和count
的JSON字符串,count
应该是查询结果的数量,而view
是HTML的匹配的行,现在在您的控制器中,您可以调用生成HTML的视图并检查请求的类型:
if ( Request::ajax() )
{
$response = array();
$response['count'] = $query->count();
$response['rows'] = $query->get();
$response['view'] = View::make('row_generator')
->with('rows', $response['rows'])
->render();
return Response::json($response);
}
else
{
// handle the non-ajax requests
}
当然,还有许多其他方法可以检索/操作数据,您也可以在客户端生成表行。