Php $ var в функции Javascript Laravel

Я передаю 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.

Думаю, php скрипт не будет работать в javascript

Jin 04.12.2018 09:35

@jin Javascript находится внутри шаблонов Blade, так что это должно работать. PHP в файлах .js не будет работать (если вы не укажете серверу)

brombeer 04.12.2018 09:37

Возможный дубликат Как передать переменные и данные из PHP в JavaScript?

online Thomas 04.12.2018 09:42

это уж точно не та же тема @Thomas!

yepsolutely 04.12.2018 09:44

@Snickers, но и код контроллера тоже

Mihai Matei 04.12.2018 09:56

@MateiMihai обновил вопрос. добавил контроллер. Но также у меня есть другой контроллер и выборка той же таблицы с теми же $ estates. но с этим проблем нет.

yepsolutely 04.12.2018 09:58

Выдает ли PHP или ваш браузер первую ошибку о недействительном токене? Вы можете поделиться сгенерированным кодом?

Nico Haase 04.12.2018 10:00

@NicoHaase, ты потерял меня там. Я не знаю, как это понять. PHP или браузер. а какой сгенерированный код?

yepsolutely 04.12.2018 10:01

Ваш сервер генерирует некоторый JS-код через PHP и отправляет его в браузер. Браузер пытается интерпретировать этот код и может выдать ошибку - если бы вы могли поделиться этим кодом (или проверить его самостоятельно), вы могли бы обнаружить ошибку.

Nico Haase 04.12.2018 10:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
147
2

Ответы 2

Вы можете использовать переменные 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 действительно так названа .. Вроде какая-то опечатка

Mihai Matei 04.12.2018 09:49

нет проблем с именем, я проверил его, но код yoru не работал, такая же ошибка все еще там

yepsolutely 04.12.2018 09:50

спасибо за обновление, но теперь я получаю эту ошибку. InvalidValueError: setCenter: not a LatLng or LatLngLiteral: not an Object кстати в базе 4 адреса. если вы удалите foreach, как я могу изменить это с помощью маркера?

yepsolutely 04.12.2018 10:10

Что ж, теперь другая история ... Свойство center ожидает объект с заданными широтой и долготой. Вы не можете передать ему адресную строку. Наверное, позиция тоже. Кроме того, сжатие, которое я написал, делает то же самое, что и ваш foreach

Mihai Matei 04.12.2018 10:12

Я дал центр: широты и долготы города, но маркер должен идти вместе со строкой адреса. Теперь ошибка переходит в раздел маркера.

yepsolutely 04.12.2018 10:16

Я очень благодарен за обновленный код. но теперь я получаю эту ошибку: Undefined property: stdClass::$lat Также я думаю, что какой-то синтаксис в этих строках [{{$key}}] Я использую ["{{$key}}"], но все еще ту же ошибку.

yepsolutely 04.12.2018 10:33

Другие вопросы по теме