Laravel:使用AJAX请求呈现部分视图

时间:2014-07-27 18:16:35

标签: jquery ajax laravel laravel-4

我正在尝试制作单页CRUD应用程序,而我正在使用AJAX和jQuery。在这种情况下,我提交表单并异步存储我的数据库中的新国家/地区,然后使用新数据呈现部分视图。

这是我的脚本和从数据库中检索国家并返回部分视图的方法。

$('#create-country-form').submit(function(event) {
    $.post('/country/store', $('#create-country-form').serialize(), function() {
        $.get('/country/all', function(data) {
            $('#countries-table').empty();
            $('#countries-table').append(data['html']);
        });
    });
    event.preventDefault();
});

class CountryController extends BaseController {

    public function all() {
        $countries = Country::All();

        $html = View::make('countries.list', compact('countries'))->render();

        return Response::json(['html' => $html]);
    }

    // ...

}

但是,我不喜欢使用jQuery在页面中实际呈现视图的想法,感觉这应该是Laravel的工作。

如何使用Laravel渲染局部视图以及使用AJAX,而不必将该工作委托给jQuery(append()empty())?

5 个答案:

答案 0 :(得分:6)

将视图传递给视图助手,将其渲染为变量并将该变量作为对AjAx的响应返回。

$view=view('your-view-blade');
$view=$view->render();
$responseData->responseSuccess($view);

在AjAx的回调中,您可以使用呈现的HTML,您可以自由地将HTML附加到任何元素。

答案 1 :(得分:3)

你感到困惑。

Laravel 已经进行局部渲染。您正在调用View::make()并将呈现的视图返回到$html

然后你将渲染的视图传递给jQuery,它只是显示给它的数据 - 它本身没有进行任何计算。

答案 2 :(得分:3)

在视图文件之前使用字符串方法

return (String) view('Company.allUserAjax');

答案 3 :(得分:0)

您可以通过render()函数呈现视图,然后通过JSON响应将其返回

$arr['key1'] = value; 
$arr['key2'] = value; 

$view = view('view.name', $arr)->render();
return Response::json(['status' => 200, 'view' => $view]);

答案 4 :(得分:0)

我认为您正在使客户端与服务器混淆。

  1. 您可以使用jQuery或Javascript提取等方法从客户端进行呼叫。
  2. 该请求将发送到url,可以是后端的API或控制器。
  3. 该控制器将返回部分视图。
  4. 您只需在ajax调用成功时获得响应,然后在前端呈现它即可。

这是一种非常简单有效的方法,可以动态呈现内容而无需刷新页面。只需获得所需的内容,即可节省带宽并在页面上加载时间。