Я передаю php $ var в Javascript с контроллера. $ var получил адреса из БД. И я поместил это в Javascript. Теперь я вижу адреса в консоли. Нет проблем с этим, я тоже не знаю, почему выскакивает синтаксическая ошибка.
Вот как я вставляю его в JS.
function initMap(){
var options = {
zoom:8,
center:
'{!! $estates[0]->address !!}'
}
var map = new google.maps.Map(document.getElementById("map"), options);
var marker = new google.maps.Marker({
position:
@foreach($estates as $addr)
'{!! $addr->address !!}',
@endforeach
map:map
});
var infoWindow = new google.maps.InfoWindow({
content:'content here'
});
marker.addListener('click', function () {
infoWindow.open(map, marker);
});
}
мой foreach работает без проблем, я вижу адреса в консоли, но также и в этой строке: выскакивает ошибка '{!! $estates[0]->address !!}'. На самом деле я вижу адрес, а не в этой строке.
ошибка такая:
Uncaught SyntaxError: Invalid or unexpected token
Есть ли у вас какие-либо идеи? Я делаю синтаксическую ошибку. Но если это сделать, как я могу получить адреса на консоли?
Также есть эта ошибка в той же строке:
Undefined variable: estates (View: /var/www/html/laravel/resources/views/layouts/app.blade.php) (View: /var/www/html/laravel/resources/views/layouts/app.blade.php)
Контроллер
public function index()
{
$estates = DB::table("allestates")
->get();
return view("home", compact('estates'));
}
тема отличается от дублированных. это не чистый JS, я работаю с Laravel.
@jin Javascript находится внутри шаблонов Blade, так что это должно работать. PHP в файлах .js не будет работать (если вы не укажете серверу)
Возможный дубликат Как передать переменные и данные из PHP в JavaScript?
это уж точно не та же тема @Thomas!
@Snickers, но и код контроллера тоже
@MateiMihai обновил вопрос. добавил контроллер. Но также у меня есть другой контроллер и выборка той же таблицы с теми же $ estates. но с этим проблем нет.
Выдает ли PHP или ваш браузер первую ошибку о недействительном токене? Вы можете поделиться сгенерированным кодом?
@NicoHaase, ты потерял меня там. Я не знаю, как это понять. PHP или браузер. а какой сгенерированный код?
Ваш сервер генерирует некоторый JS-код через PHP и отправляет его в браузер. Браузер пытается интерпретировать этот код и может выдать ошибку - если бы вы могли поделиться этим кодом (или проверить его самостоятельно), вы могли бы обнаружить ошибку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать переменные php внутри файлов лезвий laravel как
var options = { увеличение: 8, центр: '{{$ estates [0] -> адрес}}' }
Я думаю, что один из адресов содержит символ '. Чтобы этого избежать, используйте функцию addlashes. Вы можете сделать это в контроллере:
public function index()
{
$estates = DB::table("allestates")->get()->map(function($estate) {
$estate->address = addslashes($estate->address);
return $estate;
});
return view("home", compact('estates'));
}
И соответствующий js будет:
var options = {
zoom:8,
center: new google.maps.LatLng({{$estates[0]->lat}}, {{$estates[0]->long}});
}
Поскольку у вас несколько адресов, это означает, что у вас также будет несколько маркеров. При этом ваш код должен выглядеть примерно так:
function initMap(){
var options = {
zoom:8,
center: new google.maps.LatLng({{$estates[0]->lat}}, {{$estates[0]->long}});
}
var map = new google.maps.Map(document.getElementById("map"), options);
var infoWindow = new google.maps.InfoWindow({
content:'content here'
});
var markers = [];
@foreach ($estates as $key => $estate)
markers[{{$key}}] = new google.maps.Marker({
position: new google.maps.LatLng({{$estate->lat}}, {{$estate->long}});
map: map
});
markers[{{$key}}].addListener('click', function () {
infoWindow.open(map, markers[{{$key}}]);
});
@endforeach
}
@Snickers убедитесь, что переменная estates действительно так названа .. Вроде какая-то опечатка
нет проблем с именем, я проверил его, но код yoru не работал, такая же ошибка все еще там
спасибо за обновление, но теперь я получаю эту ошибку. InvalidValueError: setCenter: not a LatLng or LatLngLiteral: not an Object кстати в базе 4 адреса. если вы удалите foreach, как я могу изменить это с помощью маркера?
Что ж, теперь другая история ... Свойство center ожидает объект с заданными широтой и долготой. Вы не можете передать ему адресную строку. Наверное, позиция тоже. Кроме того, сжатие, которое я написал, делает то же самое, что и ваш foreach
Я дал центр: широты и долготы города, но маркер должен идти вместе со строкой адреса. Теперь ошибка переходит в раздел маркера.
Я очень благодарен за обновленный код. но теперь я получаю эту ошибку: Undefined property: stdClass::$lat Также я думаю, что какой-то синтаксис в этих строках [{{$key}}] Я использую ["{{$key}}"], но все еще ту же ошибку.
Думаю, php скрипт не будет работать в javascript