将数据从Laravel $集合传递到jquery循环

时间:2017-09-19 16:07:51

标签: javascript php jquery laravel laravel-5

大家好,这是一个Laravel问题。我正在一个目录网站上工作。我正在尝试解决这样的问题:我需要填充一个开放的街道地图,其标记处理为javascript变量,如下所示:

var mapMarkers = [
{
    title: "Paolo",
    address: "Troy South End, 264 E. Berkley St, Boston",
    lat: 42.3432809,
    lng: -71.06297789999996,
    img: "assets/images/listings/1.jpg",
    category: "Restaurants",
    icon: "icon-dinner",
    featText: "~ $18-$90",
    rating: "4.9",
    link: "#"
},
{
    title: "Paolo",
    address: "5347 N Clark St, Chicago, IL",
    lat: 41.9794495,
    lng: -87.6679747,
    img: "assets/images/listings/2.jpg",
    category: "Restaurants",
    icon: "icon-dinner",
    featText: "Best fried chicken of the town",
    rating: "4.2",
    link: "#"
},
{
    title: "Paolo",
    address: "171 E Broadway, New York, NY",
    lat: 40.7138292,
    lng: -73.98966669999999,
    img: "assets/images/listings/5.jpg",
    category: "Restaurants",
    icon: "icon-dinner",
    featText: "Promotional Lunch $45",
    rating: "4.1",
    link: "#"
}
   ];

问题是我在Laravel集合中有这些数据,我正在寻找将它们传递给javascript的最佳方法:

    var mapMarkers = [
{
    title: $companies->name,
    address: $companies->address,
   ............
},

有人可以帮助了解解决此问题的最佳做法吗?

2 个答案:

答案 0 :(得分:1)

与Eloquent对象类似,可以通过调用toJson()方法将集合序列化为JSON(Javascript对象)。因此,$companies->toJson()应该为您提供所需的信息。

在Blade模板中,您可以打印"公司'像这样的json格式:

<script>
    var mapMarkers = {!! $companies->toJson() !!};
</script>

所以,现在当你在javascript代码中使用mapMarkers时,它就像在PHP中使用$companies集合一样。

您的字段看起来也不匹配(在您的示例中为title: $companies->name)。要使返回的json包含title而不是name,您可以映射所有公司,并将标题字段设置为公司名称。有了这个,上面的例子看起来像这样:

<script>
    var mapMarkers = {!! $companies->map(function ($company) { $company->title = $company->name; return $company; })->toJson() !!};
</script>

通过集合进行映射会创建一个新集合,其中包含从映射回调函数返回的值。

您可以在Laravel文档中查看这些方法:toJson()map()

答案 1 :(得分:0)

使用ajax,你可以完成这个,因为通常情况下,集合和数组会自动作为JSON由Laravel返回,集合也有->toJson()方法可以用来返回响应,然后JSON.parse(the_response)给出你是一个javascript对象。