Как использовать данные в строках, возвращаемых из базы данных в JavaScript - PullRequest
2 голосов
/ 29 мая 2011

Используя Javascript, мне нужно получить несколько строк из таблицы БД, а затем перебрать каждую строку и использовать разные поля из каждой строки.

Например, если я получу такие строки:

var coordinatesArray = '<?php
    global $wpdb;
    echo $wpdb->get_var("SELECT * FROM users_coordinates WHERE lat>20 and lat<40 and long>-10 and long<40);
?>';

Как мне написать следующий код:

// for each row do: {
//    alert the id field
//    alert the lat field
//    alert the long field
// }

Ответы [ 3 ]

4 голосов
/ 29 мая 2011

JSON - это способ вставить вывод, который гарантирует, что результатом будет действительный JavaScript, и защищает вас от выполнения произвольного кода в JS.

var coordinatesArray = <?php
global $wpdb;
// replace * by id, lat and long since you don't need other fields
$sql = "SELECT id, lat, long FROM users_coordinates WHERE lat>20 and lat<40 and long>-10 and long<40";
$rows = $wpdb->get_results($sql);
// if the function fails (?), make valid JS syntax
if (is_array($rows)) {
    echo json_encode($rows);
} else {
    echo '[]';
}
?>;
for (var i=0; i<coordinatesArray; i++) {
    alert(coordinatesArray[i].id);
    alert(coordinatesArray[i].lat);
    alert(coordinatesArray[i]["long"]);
}

Другим способом было бы создание объекта JS с полем id в качестве ключа объекта JS:

var coordinatesMap = <?php
global $wpdb;
// replace * by id, lat and long since you don't need other fields
$sql = "SELECT id, lat, long FROM users_coordinates WHERE lat>20 and lat<40 and long>-10 and long<40";
// note: OBJECT_K, the result will be an associative array with the first field of a
// row as key
$rows = $wpdb->get_results($sql, OBJECT_K);
// if the function fails (?), make valid JS syntax
if (is_array($rows)) {
    echo json_encode($rows);
} else {
    echo '{}';
}
?>;
for (var id in coordinatesMap) {
    if (coordinatesMap.hasOwnProperty(id)) {
        alert(id);
        alert(coordinatesMap[id].lat);
        alert(coordinatesMap[id]["long"]);
    }
}

Пожалуйста, замените alert чем-то другим, это не очень удобно для пользователя. Помните, что PHP! = JavaScript, и вы не можете использовать функции PHP в JavaScript и наоборот. Если вы не уверены, как будет выглядеть вывод, используйте параметр Просмотр источника страницы.

Ссылки:

0 голосов
/ 29 мая 2011

Возможно, вам лучше будет написать свой собственный PHP-скрипт для извлечения этих значений (а не в зависимости от WP), просмотра их в цикле и создания объекта json, который вы возвращаете в javascript.

0 голосов
/ 29 мая 2011

Во-первых, $ wpdb-> get_var может получить только одно значение.http://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Variable

Вместо этого используйте $ wpdb-> get_results http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

var coordinatesArray = '<?php
    global $wpdb;
    echo $wpdb->get_results("SELECT * FROM users_coordinates WHERE lat>20 and lat<40 and long>-10 and long<40);
?>';

for(coord in coordinatesArray) {
    alert(coordinatesArray[coord].id);
    alert(coordinatesArray[coord].lat);
    alert(coordinatesArray[coord].long);
}

Я не проверял, но это должно быть что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...