【问题标题】:Laravel - Return 2 views in AJAX responseLaravel - 在 AJAX 响应中返回 2 个视图
【发布时间】:2021-01-14 09:58:34
【问题描述】:

我有一个带有 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>

【问题讨论】:

    标签: jquery ajax laravel


    【解决方案1】:

    如果您需要在 AJAX 响应中返回 2 个视图,您可以使用 response()-&gt;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);
    

    另外,请确保使用-&gt;render() 函数将视图转换为 HTML。

    【讨论】:

    • 感谢@Tim Lewis。该方法有效,我的问题是返回的第二个视图是带有 2 个下拉菜单的视图,并且看起来上下文丢失了,因为当我第一次选择下拉值时,会进行 AJAX 调用,但第二次不会触发 AJAX .
    • 啊,这很容易处理。您的代码:$('.dropdown_get').on('change', ...) 可以是 $('body').on('change', '.dropdown_get', ...)。这可以处理需要 JS 才能运行的情况,即使 HTML 已更新。由于您将事件绑定到body &gt; .dropdown_get,因此即使该类不存在/稍后更新,它也会起作用
    • 非常感谢@Tin Lewis,这种方法非常有效!
    猜你喜欢
    • 2019-12-19
    • 2020-10-11
    • 2015-05-06
    • 2013-11-10
    • 1970-01-01
    • 2019-01-12
    • 2020-01-06
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多