大家好,这是一个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,
............
},
有人可以帮助了解解决此问题的最佳做法吗?
答案 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>
通过集合进行映射会创建一个新集合,其中包含从映射回调函数返回的值。
答案 1 :(得分:0)
使用ajax,你可以完成这个,因为通常情况下,集合和数组会自动作为JSON由Laravel返回,集合也有->toJson()
方法可以用来返回响应,然后JSON.parse(the_response)
给出你是一个javascript对象。