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

13

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

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

$('#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())来完成这项工作?


我同意,如果有某种插件将会很酷。我认为你可以相当轻松地创建一个JS实用工具。 - Sabrina Leggett
5个回答

9

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


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

在您的Ajax回调函数中,您可以使用已呈现的HTML,自由地将该HTML附加到任何元素上。

4

在查看文件之前使用字符串方法

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

3
你有些混淆了。
Laravel 已经在进行局部渲染。你正在调用 View::make() 并将渲染后的视图返回到 $html 中。
然后你将渲染后的视图传递给 jQuery,它只是显示给定的数据 - 它不会自己进行任何计算。

2
是的,我知道Laravel正在渲染视图,但必须是jQuery告诉返回的数据要分配给特定的DOM元素。 Laravel不能用Blade做到这一点吗? - dabadaba
1
不行 - AJAX 只能通过 jQuery(或 JavaScript)实现。Laravel 是 PHP,因此只能在视图的初始加载时编译一次。你正在做的是正确的方法。 - Laurence
所以我现在这样做是唯一的方法吗?此外,在显示会话闪存消息时,由于页面没有重新加载,Blade @if等不会发生,我看不到这些消息。我应该从控制器返回它们并使用jQuery将它们分配给页面吗? - dabadaba

1
你可以通过 render() 函数呈现视图,然后通过 JSON 响应返回它。
$arr['key1'] = value; 
$arr['key2'] = value; 

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

4
请不要仅作为答案发布代码,还需包含对代码的说明,以及它是如何解决问题的。带有解释的答案通常具有更高的质量,并且更容易引起赞同。 - Mark Rotteveel

0

我认为你把客户端和服务器搞混了。

  1. 你可以使用jQuery、Javascript fetch或其他方式从客户端发起调用。
  2. 该请求将发送到一个URL,可以是API或后端控制器。
  3. 该控制器将返回部分视图。
  4. 你只需在ajax调用成功时获取响应,然后在前端呈现即可。

这是一种非常简单且高效的动态呈现内容的方法,无需刷新页面即可获取所需内容,节省带宽和页面加载时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接