繁体   English   中英

如何在Laravel(Google Maps API)中将PHP数据发送到Javascript文件

[英]How to send PHP data to Javascript file in Laravel (Google maps API)

由于页面视图中的JavaScript,我在Laravel中的pagespeed遇到了麻烦。

我试图通过在页面视图上没有任何JavaScript,而是在单独的search.js文件中来提高我的pagespeed。

我用Google地图生成了地图,并在地图上放置了约100个标记。 取决于标记放置位置的数据存储在MySQL数据库中(作为用户信息的一部分)。

现在,我在页面上的foreach循环中为每个传递给该视图的用户使用脚本在页面上。 这使页面源代码非常冗长,因为它经过循环100次并在源代码中显示了所有这些javascript。

以下仅是我的代码示例,可以理解我的意思,整个代码显示在此处

<script>
@foreach($usersall as $user)
...

var latlng{{ $user->id }} = {lat: {{ $user->lat }} , lng: {{ $user->long }} };

var marker{{ $user->id }} = new google.maps.Marker({
  map: map,
  clickable : true,
  icon: '/assets/img/pin_marker_open.png',
  position: latlng{{ $user->id }}
});

markers.push(marker{{ $user->id }});

...
@endforeach
</script>

我无法在search.js文件中执行此操作,因为我没有$usersall的数据。

所以这是我的问题: 如何将用户的PHP变量传递到search.js文件,这样我可以在地图上显示所有标记,而页面视图本身没有任何JavaScript?

这不是执行此操作的最佳方法,而是最直接的方法:

<script>
    var users = {{ $usersall }};
</script>

集合的默认输出(在回显时)将转换为JSON字符串。 因此,您可以将其直接分配给JS中的变量。

但是,理想情况下,您应该通过AJAX检索此值并将其分别传递给函数。

据我所知,如果您想要的是在search.js中获取php变量的值。

我建议为此目的使用ajax,如果这不是一种选择,则可以使html中的用户循环到hiddien字段,例如

@foreach($usersall as $user)
    <input type="hidden" class="user" value="{{$user}}">
    //if fails try encoding json_encode($user) or json_decode($user) i don't rememer
@endforeach

然后在您的js文件中循环,您可以使用user类获取所有元素,并对其进行循环以获取值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM