#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.