Php 用ajax在Laravel中填充表?
我有一个Laravel应用程序,我在其中创建了一个页面布局,并将一个表作为“内容”变量添加到其中(几乎所有内容都来自我找到的教程)。以下是控制器操作:Php 用ajax在Laravel中填充表?,php,jquery,ajax,laravel-4,Php,Jquery,Ajax,Laravel 4,我有一个Laravel应用程序,我在其中创建了一个页面布局,并将一个表作为“内容”变量添加到其中(几乎所有内容都来自我找到的教程)。以下是控制器操作: public function getMain() { $js_config = Category::all(); $resources = Resource::all()->take(100); $this->layout->content = View::make('categories.show')-
public function getMain() {
$js_config = Category::all();
$resources = Resource::all()->take(100);
$this->layout->content = View::make('categories.show')->with('js_config', $js_config)->with('resources', $resources);
}
这将使用主布局模板,并使用内容变量插入此表:
<table class="table table-striped table-bordered">
<thead>
<tr>
<td>ID</td>
<td>Name</td>
</tr>
</thead>
<tbody>
@foreach($resources as $key => $value)
<tr>
<td>{{ $value->id }}</td>
<td>{{ $value->title }}</td>
</tr>
@endforeach
</tbody>
</table>
jQuery在控制器中调用此操作方法:
public function getFilter()
{
$input = Input::get('category.0');
$categories = Category::find($input);
//category is the name from the model below
return Response::json(array(
'error' => false,
'category' => $categories->toArray()),
200
);
}
(之所以有一个数组作为输入,是因为我最终希望能够允许在树中拾取多个节点)
此操作正确地从数据库获取数据,并将其作为json返回。作为测试,上面jQuery中的回调此时会发出警告
当然,我真正想做的是重新填充桌子。现在,正如您所看到的,我已经使用Bootstrap创建了一个漂亮的表,我只希望能够让用户随意重新填充它,而无需刷新页面
但我不知道怎么做,除非用某种字符串返回值费力地重新创建这个表,但这似乎不是一个好主意
我希望有某种方法将返回值传递回视图,并让它重新加载表中的值,使用与我在php变量“content”中加载的相同的“子视图”,如上所述
非常感谢您的帮助
编辑:
根据要求,这里有一个json示例(取自浏览器控制台输出,它实际上不是categories表,而是相同的格式):
[{“id”:“1”,“标题”:“运输AC 4494”,“创建人”:“4”,“修改人”:null},{“id”:“2”,“标题”:“安全第一AC 4294”,“创建人”:“3”,“修改人”:null},{“id”:“3”,“标题”:“保修AC 34066”,“创建人”:“4”,“修改人”:null}]
编辑2(刚刚意识到在之前的json编辑中,控制器有一些垃圾,所以我现在将其更改为更干净的示例)
编辑3:
我通过在jQuery中创建表行实现了这一点:
var trHTML = '';
$.each(resultdata, function (i, item) {
trHTML += '<tr><td>' + item.id + '</td><td>' + item.title + '</tr>';
});
$('#ajaxtable').html(trHTML);
但它不起作用。虽然它确实为我提供了该视图的html,但它是未经处理的。也就是说,foreach循环没有解析,但仍然作为代码存在于表中。如图所示:
那么如何用jquery代码加载这个视图呢?我觉得,即使jquery创建表行有效,用php创建视图,然后用jquery加载视图应该是更正确的方法…?您查看过Datatables jquery插件吗?实际上,Laravel有一个很好的包,可以帮助集成Laravel和Datatables。Laravel包生成json,您可以使用Datables+AJAX重新填充数据。可能正在办理退房手续
否则,您只需要使用AJAX来重新填充表。正如Sirago所回答的,使用jQuery Datatables是以AJAX方式将数据加载到表中的一个好选项 除了Sirago所建议的,这里还有另一个很棒的Laravel4包,它专门用于从服务器端生成JSON数据
但除了服务器端配置(修改composer.json、config/app.php等文件),您还需要使用Javascript编写代码,同时利用数据表。恐怕我需要更多的信息,我对Ajax和Laravel都不是那么友好,我正在努力学习。我查看了这个插件,但不知道如何将它应用到我上面描述的案例中。另外,您的第二个建议也可以,但这正是我的问题所在:我到底应该如何使用AJAX重新填充表?您可以发布一个json示例吗?
var trHTML = '';
$.each(resultdata, function (i, item) {
trHTML += '<tr><td>' + item.id + '</td><td>' + item.title + '</tr>';
});
$('#ajaxtable').html(trHTML);
<table class="table table-striped table-bordered" id="resultstable">
<thead>
<tr>
<td>ID</td>
<td>Name</td>
</tr>
</thead>
<tbody id="ajaxtable">
@foreach($resources as $key => $value)
<tr>
<td>{{ $value->id }}</td>
<td>{{ $value->title }}</td>
</tr>
@endforeach
</tbody>
</table>
public function getTable()
{
$resources = Resource::all()->take(5);
return View::make('categories.results')->with('resources', $resources);
}