我有一个Laravel应用程序,我在其中创建了一个页面布局,将一个表作为"content“变量添加到其中(几乎都来自我找到的教程)。下面是控制器操作:
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);
}这将使用主布局模板,并使用content变量插入此表格:
<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>但问题来了:我有一个jstree,用户可以在其中选择节点,触发一个jQuery方法:
$('#jstree2').on("changed.jstree", function (e, data) {
console.log(data.selected);
$.get("filter", { category: data.selected })
.done(function (resultdata) {
//Test only, this returns the data wanted in json, which I stringify just to display in test
alert("Data Loaded: " + JSON.stringify(resultdata));
});
});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
);
}(之所以有一个数组作为输入,是因为我最终希望能够在树中选择多个节点)
此操作正确地从DB获取数据,并将其作为json返回。然后,上面jQuery中的回调会在此时发出警报,就像测试一样。
当然,我真正想做的是重新填充表。现在,正如您所看到的,我已经使用Bootstrap创建了一个漂亮的表,我只希望能够让用户在不刷新页面的情况下随意重新填充它。
但我不知道如何做到这一点,除了费力地在某种字符串返回值中重新创建这个表,但这似乎不是一个好主意。
我希望有一些方法可以将返回值传递回视图,并让它重新加载表中的值,使用上面描述的在php变量"content“中加载的相同"sub view”?
非常感谢您的帮助!
编辑:
按照要求,下面是json的示例(取自浏览器控制台输出,它实际上不是categories表,而是相同的格式):
{"id":"1",“title”:“运输AC4494”,"created_by":"4","modified_by":null},{"id":"2",“title”:“安全第一AC 4294","created_by":"3","modified_by":null},{"id":"3",”title“:”保修AC 34066","created_by":"4","modified_by":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);但我主要希望这能更好地解释我的问题:这不是我想要做的。我想要的只是创建一个局部视图,然后用jquery加载这个现成的视图:
如下所示的局部视图:
<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>我通过从jquery代码中创建并调用控制器中的一个新函数来测试这一点:
public function getTable()
{
$resources = Resource::all()->take(5);
return View::make('categories.results')->with('resources', $resources);
}但它不起作用。虽然它确实给了我那个视图的html,但它是未经处理的。也就是说,foreach循环没有被解析,但仍然作为代码存在于表中。如图所示:

那么如何用jquery代码加载这个视图呢?我觉得,即使jquery创建表行工作正常,在php中创建视图,然后用jquery加载它应该是更正确的方式……?
发布于 2014-02-07 09:11:31
你看过Datatables jQuery插件了吗?实际上,Laravel有一个很好的包,可以帮助集成Laravel和Datatables。Laravel包生成json,您可以使用Datables+AJAX重新填充数据。可能要检查一下...
https://github.com/Chumper/datatable http://datatables.net/
否则,您只需要使用AJAX重新填充表。
发布于 2014-08-19 08:59:56
正如Sirago回答的那样,使用jQuery Datatables是以ajax方式将数据加载到表中的好选择。
除了Sirago的建议之外,这里还有另一个很棒的Laravel 4包,它专门用于从服务器端生成JSON数据。
https://github.com/bllim/laravel4-datatables-package
但除了服务器端配置(修改composer.json、config/app.php等文件)外,您还需要使用Javascript编写代码,还需要利用Datatables。
https://stackoverflow.com/questions/21617237
复制相似问题