首页 > 解决方案 > Laravel - 在 AJAX 响应中返回 2 个视图

问题描述

我有一个带有 2 个@include指令的视图,这些指令是执行 AJAX 调用时更新数据的子视图。第@include一个在 AJAX 响应中正确更新,但我需要在同一个调用中返回第二个@include以更新显示的数据。

我正在按照onchange事件的方法更新部分视图,如下所示,我相信该方法也将返回第二个部分视图并加载如下:$("#dashboardindicators").html(data);

控制器

if($request->ajax()){
                
    return view('pages.dashboard.dashboardindicators', compact('chart4_prop_null','chart4_progress','chart3_prop_null','chart3_progress',
    'chart2_prop_null','chart2_progress','chart1_prop_null','chart1_progress',
    'market_center_dropdown', 'mega_agent_dropdown', 'teams_dropdown'));

    

} else {
    return view('pages.dashboard.dashboard', compact('chart4_prop_null','chart4_progress','chart3_prop_null','chart3_progress',
                                            'chart2_prop_null','chart2_progress','chart1_prop_null','chart1_progress',
                                            'market_center_dropdown', 'mega_agent_dropdown', 'teams_dropdown'));
}

JS

<script>
    $(document).ready(function () {
    
    $('.dropdown_get').on("change", function(){

        KTApp.block("#dashboardindicators", {
                overlayColor: "#000000",
                type: "v2",
                state: "success",
                message: "Procesando..."
            }),
        
        $.ajax({
        url: "/dashboard",
        method: 'GET',
        data: {
            market_center_id: $("#kt_market_center_dropdown option:selected").val(),
            mega_agent_id: $("#kt_mega_agent_dropdown option:selected").val(),
            team_id: $("#kt_team_dropdown option:selected").val(),
        },
        success: function (data) {
            $("#dashboardindicators").html(data);
            setTimeout(function () {
                    KTApp.unblock("#kt_blockui_1_content")
                });
             
        }
        });
    });
});
</script>

标签: jqueryajaxlaravel

解决方案


如果需要在 AJAX 响应中返回 2 个视图,可以使用以下response()->json()方法:

$dashboardIndicators = view('pages.dashboard.dashboardindicators', compact(...)->render();
$dashboard = view('pages.dashboard.dashboard', compact(...)->render();

return response()->json(['dashboardIndicators' => $dashboardIndicators, 'dashboard' => $dashboard]);

然后,在您的success:函数中,像这样访问:

$("#dashboardindicators").html(data.dashboardIndicators);
$("#dashboard").html(data.dashboard);

此外,请确保使用该->render()函数将视图转换为 HTML。


推荐阅读