在ajax之后重新加载laravel foreach

Posted

技术标签:

【中文标题】在ajax之后重新加载laravel foreach【英文标题】:Reload laravel foreach after ajax 【发布时间】:2018-03-27 16:29:02 【问题描述】:

我的视图中有一个 foreach 循环

<div class="col-lg-6 collapse" >
    <div class="job-summ-panel" id="job-summ-panel" >
        @foreach($jobs as $job)
            $job['active']
        @endforeach
    </div>
</div>

我在页面上还有一个带有地图标记的谷歌地图,当我单击地图标记时,会进行 ajax 调用以获取与页面相关的所有信息

$.ajax(
    method: "get",
    url: '/joblocation/jobsummary',
    data: 
        job_ref: marker.getCustomData('job_ref'),
    ,
    success: function (response) 
        $('.collapse').collapse('show');
        $('#job-summ-panel').html(response.jobs)
    ,                               
); 

作业在首次加载页面时最初为空,因此不会显示任何内容。我不知道如何刷新/重新加载 div 并使用新的响应数据再次执行 foreach。

【问题讨论】:

您需要通过 javascript 而不是 laravel foreach 循环作业! 【参考方案1】:

有两种方法可以实现这一点。一是服务端生成,二是客户端应用。

1。服务器端内容生成

您可能希望将页面的该部分移动到不同的刀片模板。然后通过 AJAX 调用,您可以重建页面并将输出发送到浏览器。例如: 路线定义

Route::post("generateList", "Partials@generateList");

部分模板定义

Partials\loopContainer.blade.php

<div class="col-lg-6 collapse" >
    <div class="job-summ-panel" id="job-summ-panel" >
        @foreach($jobs as $job)
            $job['active']
        @endforeach
    </div>
</div>

您的部分内容生成器

<?php 

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;

    class Partials extends Controller 

    public function generateList(Request $request)
        // generate data from the parameters again
        $input = $request->input('job_ref');
        $generatedData = GenerateDataFromJobRef($input);
        return View::make("partials/loopContainer", ["jobs" => $generatedData]);
    
?>

客户端刷新

$.ajax(
    method: "POST",
    url: '/generateList',
    data: 
        job_ref: marker.getCustomData('job_ref'),
    ,
    success: function (response) 
        $('.collapse').collapse('show');
        $('#job-summ-panel').html(response)
    ,                               
); 

2。客户端内容应用程序

路线定义

Route::post("generateList", "Partials@generateList");

您的部分内容生成器

<?php 

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;

    class Partials extends Controller 

    public function generateList(Request $request)
        // generate data from the parameters again
        $input = $request->input('job_ref');
        $generatedData = GenerateDataFromJobRef($input);
        return json_encode(["data" => $generatedData]);
    
?>

客户端刷新

$.ajax(
    method: "POST",
    url: '/generateList',
    data: 
        job_ref: marker.getCustomData('job_ref'),
    ,
    success: function (response) 
        $('.collapse').collapse('show');            
        var appendString = "";
        for(var i = 0; i < response.data.length; i++)
            appendString += "<div>" + response.data[i].info + "</div>";    
        
        $('#job-summ-panel').empty().append(appendString);
    ,                               
); 

【讨论】:

我明白了,谢谢,制作单独的模板很有意义。

以上是关于在ajax之后重新加载laravel foreach的主要内容,如果未能解决你的问题,请参考以下文章

用ajax加载laravel视图

在jQuery ajax POST之后使用GET重新加载当前页面[重复]

Laravel 刀片模板停止重新加载主布局

在Ajax调用之后重新触发Jquery脚本

为什么我的ajax请求从Laravel控制器重复相同的数据?

ajax加载的内容页面刷新之后,内容怎么保持不变?