Передача переменной php в javascript внутри функции php, которая повторяет код js

#javascript #php #wordpress

#javascript #php #wordpress

Вопрос:

Я кодирую плагин для WP и пишу JavaScript скрипт для head документа страницы, используя php echo . Мне нужно передать некоторые php переменные в скрипт. Я пытался json.encode() , но он не передает правильную вещь, вот моя функция:

 function test_action()
{
    global $wpdb;
    $contents = $wpdb->get_results("SELECT content FROM wp_map_user_demo");
    $lats = $wpdb->get_results("SELECT latitude FROM wp_map_user_demo");
    $longs = $wpdb->get_results("SELECT longitude FROM wp_map_user_demo");

    //Modifying the header file of WP
    echo '<title>Demo</title>
            <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
            <meta charset="utf-8">
            <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=myKey"></script>';
    //Including the custom Google Maps script
    echo "<script type='text/javascript'>
                    var map;
                    var contents = ". json_encode($contents) .";
                    var lats = ". json_encode($lats) . ";
                    var longs = " .  json_encode($longs). ";

                    document.write('<p>'   lats[0]   '</p>');
                    function initialize() {
                    var mapOptions = {
                      center: new google.maps.LatLng(lats[0], longs[0]),
                      zoom: 8
                    };
                    var map = new google.maps.Map(document.getElementById('map'),
                        mapOptions);
                  }
                  //map.setOptions({draggable: true});
                  google.maps.event.addDomListener(window, 'load', initialize);
            </script>";
}
 

Когда я открываю страницу на WP document.write('<p>' lats[0] '</p>'); , выводится [object Object] на страницу вместо данных о широте.Я проверил переменные php, и они верны, поэтому я предполагаю, что моя проблема связана с JavaScript использованием.

Спасибо за вашу помощь…

Комментарии:

1. Попробуйте следующее: document.write('<p>' json_stringify(lats) '</p>'); поскольку ваша переменная закодирована в формате json, сообщите нам, что выводится.

Ответ №1:

Ваша переменная JavaScript lats представляет собой массив объектов, поэтому, когда вы это делаете lats[0] , вы получаете первый объект в массиве. Чтобы получить значение широты, вам необходимо получить доступ к latitude свойству объекта:

 document.write('<p>'   lats[0].latitude   '</p>');
 

То же самое для вашей долготы:

 longs[0].longitude
 

Комментарии:

1. Большое вам спасибо, я не знал этой информации 🙂

Ответ №2:

Попробуйте это 😉

 function test_action() {
    global $wpdb;
    $results = $wpdb->get_results("SELECT content,latitude,longitude FROM wp_map_user_demo");

    $contents = $lats = $longs = array();

    foreach($results as $result) {
        $contents[] = $result->content;
        $lats[] = $result->latitude;
        $longs[] = $result->longitude;
    }

    //Modifying the header file of WP
    echo '<title>Demo</title>
            <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
            <meta charset="utf-8">
            <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=myKey"></script>';
    //Including the custom Google Maps script
    echo "<script type='text/javascript'>
                    var map;
                    var contents = " . json_encode($contents) . ";
                    var lats = " . json_encode($lats) . ";
                    var longs = " . json_encode($longs) . ";

                    document.write('<p>'   lats[0]   '</p>');
                    function initialize() {
                    var mapOptions = {
                      center: new google.maps.LatLng(lats[0], longs[0]),
                      zoom: 8
                    };
                    var map = new google.maps.Map(document.getElementById('map'),
                        mapOptions);
                  }
                  //map.setOptions({draggable: true});
                  google.maps.event.addDomListener(window, 'load', initialize);
            </script>";
}
 

Ответ №3:

Я думаю $wpdb->get_results , возвращает не a String , а Result Set объект. Вы должны попробовать $wpdb->get_var , если хотите получить к ней прямой доступ.

Редактировать: или получить доступ к свойствам Result Set , как сказал MrCode.