2016-06-25 2 views
-2

У меня есть база данных MySQL с таблицей широт и долгот с соответствующими данными. Я пытаюсь создать карту Google и хочу проанализировать строку JSON с помощью JavaScript. Я смотрел здесь и на YouTube, и я не знаю, как решить, что я делаю неправильно.Parse JSON массив с JavaScript

Вот моя JSON строка, я получаю с моим эхом заявления:

{"cm_mapTABLE":[["1","Angels Rest Photos OR","Angels_Rest_Photos_OR","663","aaj.jpg","2","Angel's Rest","Hike one of the trails in the Gorge with a scenic overlook, stream, and waterfall.","0","blue","4.5","45.5603","-122.171","http:\/\/www.eyehike.com\/pgallery\/index.php?\/category\/6","Angels_Rest_Photos_OR\/aae.thumb.jpg\" ALIGN=left HEIGHT=115 WIDTH=150>","http:\/\/www.eyehike.com\/pgallery\/i.php?\/galleries\/Angels_Rest_Photos_OR\/aaj-th.jpg","","","",""],["2","Ape Canyon Photos WA","Ape_Canyon_Photos_WA","681","PICT0114.jpg","3","Ape Canyon Trail","This trail is popular with hikers and mountain bikers with great views of several mountains.","0","blue","11","46.1653","-122.092","http:\/\/www.eyehike.com\/pgallery\/index.php?\/category\/8","Ape_Canyon_Photos_WA\/PICT0114.thumb.jpg\" ALIGN=left HEIGHT=115 WIDTH=150>","http:\/\/www.eyehike.com\/pgallery\/i.php?\/galleries\/Ape_Canyon_Photos_WA\/PICT0114-th.jpg","","","",""]]} 

Вот мой код:

<!DOCTYPE html> 
<head> 
<?php 
require("phpsqlsearch_dbinfo.php"); // This is the file with your logon info 

//$host="localhost"; //replace with your hostname 
//$username="root"; //replace with your username 
//$password=""; //replace with your password 
//$db_name="$database"; //replace with your database 
$con=mysqli_connect("$hostname", "$username", "$password", "$database")or die("cannot connect"); 
//mysqli_select_db("$db_name")or die("cannot select DB"); 
$sql = "select * from location_markers WHERE mrk_id < 3"; //replace emp_info with your table name 
$result = mysqli_query($con, $sql); 
$json_string_data = array(); 
if(mysqli_num_rows($result)){ 
    while($row=mysqli_fetch_row($result)){ 
     $json_string_data['cm_mapTABLE'][]=$row; 
    } 
} 
mysqli_close($con); 

// You have to give the json a name to make it accessible by JS, e.g.: 
// echo 'file='.json_encode($json_string_data),';'; 

// This statement will echo the json output in the displayed web page 
echo json_encode($json_string_data); 
// please refer to our PHP JSON encode function tutorial for learning json_encode function in detail 
?> 
</head> 
<body> 
    <script> 
    for (i = 0;i < $json_string_data.length;i++){ 
    var javascript_string_data=<?php echo json_encode($json_string_data); ?>; 
     document.write(cm_mapTABLE.rank[i]); 
    } 
     </script> 
</body> 
</html> 

Я использую Firebug и здесь ошибка:

ReferenceError: $json_string_data is not defined

for (i = 0;i < $json_string_data.length;i++){

Может кто-нибудь, пожалуйста, сообщите мне правильный способ сослаться на элементы в моей строке JSON? Нужно ли мне как-то получать имена полей в моей строке JSON?

ответ

1

var javascript_string_data=<?php echo json_encode($json_string_data); ?>; образует переменную с именем javascript_string_data, содержащую объект .

Вы пытаетесь получить доступ к cm_mapTABLE.rank[i], что на самом деле считается собственностью объекта window.

Попробуйте вывести

document.write(javascript_string_data.cm_mapTABLE.rank[i]); 

Имейте в виду, что назначение строки JSON непосредственно может привести к проблемам безопасности, когда, опираясь на внешние данные, предварительно сохраненными в базе данных. Используйте вместо этого метод JSON.parse().

Далее вы пытаетесь использовать переменную PHP в вашем цикле JavaScript.

Определить переменную JavaScript перед тем использовать его в цикле:

var javascript_string_data = JSON.parse('<?echo json_encode($json_string_data); ?>'); 
for (i = 0 ; i < json_string_data.length ; i++){ 
    document.write(javascript_string_data.cm_mapTABLE.rank[i]); 
} 
+0

уведомление: 'str_replace' удален путем редактирования, так как вы хотите, чтобы объект, а не строка, и код был изменен на' JSON.parse'. –

+0

спасибо всем, я искал в Интернете для форматирования строки json и нашел сайт, на котором я могу вставлять свой вывод JSON и видеть его в формате, поэтому я буду использовать его для будущих сообщений. Я воспользуюсь сеансом JSON сегодня вечером. Я снова загрузил свою старую карту Google V2 на основе электронной таблицы Google, поэтому у меня есть передышка. – Steve

+0

В моем последнем коде я использую для получения данных mysql. Я нашел пример, который использовал XML вместо JSON. – Steve

0

Обратите внимание, что MySQL является устаревшим и запросы к базам данных MySQL должны быть MySQLi. Для запросов mysqli вам необходимо включить базу данных. Вы можете найти имя базы данных на странице администратора php. Mine можно найти, войдя в phpmyadmin и выбрав «Базы данных», затем просмотрев список и введя базу данных точно так, как показано в списке баз данных. У вас может быть только одна база данных.

<?php 
// The next file has information for $hostname, $username, $password, $database 
require_once("phpsqlsearch_dbinfo.php"); 

// Start XML file, create parent node 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server 
    $connection=new mysqli($hostname, $username, $password, $database); 
if ($connection->connect_error) die($connection->connect_error); 

// Select all the rows in the markers table 

$query = "SELECT * FROM markers 
     WHERE 1 
     ORDER BY rank, name"; 
$result = $connection-> query($query); 
if (!$result) die($connection->error); 

$rows = $result->num_rows; 

header("Content-type: text/xml"); 

// Iterate through the rows, adding XML nodes for each 
for ($j = 0 ; $j < $rows ; ++$j){ 
    $result->data_seek($j); 
    $row = $result->fetch_array(MYSQLI_ASSOC); 

    // ADD TO XML DOCUMENT NODE 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 
    $newnode->setAttribute("mrk_id",$row['mrk_id']); 
    $newnode->setAttribute("name",$row['name']); 
    $newnode->setAttribute("rank", $row['rank']); 
    $newnode->setAttribute("mileage", $row['mileage']); 
    $newnode->setAttribute("address", $row['address']); 
    $newnode->setAttribute("lat", $row['lat']); 
    $newnode->setAttribute("lng", $row['lng']); 
    $newnode->setAttribute("marker_type", $row['type']); 
    $newnode->setAttribute("mcolor", $row['mcolor']); 
    $newnode->setAttribute("permalink", $row['permalink']); 
    $newnode->setAttribute("photolink", $row['photolink']); 
    $newnode->setAttribute("routelink", $row['routelink']); 
    $newnode->setAttribute("thumbnail", $row['thumbnail']); 
} 

echo $dom->saveXML(); 

$result->close(); 
$connection->close(); 
?> 

Here is the first 5 mysql records output from this code: 
<markers> 
<marker mrk_id="1" name="Bench Lake/Snow Lake" 
rank="1" mileage="2.5" address="" lat="46.7678" 
lng="-121.707" marker_type="" mcolor="blue" 
permalink="https://www.eyehike.com/2016/bench-lake-snow-lake-wa/" 
photolink="http://www.eyehike.com/pgallery/index.php?/category/344" 
routelink="http://www.eyehike.com/pgallery/index.php?/category/345" 
thumbnail="http://www.eyehike.com/pgallery/i.php?/galleries/Snow_Lake_Photos_WA/aai-th.jpg" 
/> 
<marker mrk_id="2" name="Benham Falls" rank="1" 
mileage="0.4" address="" lat="43.939" 
lng="-121.414" marker_type="" mcolor="blue" 
permalink="https://www.eyehike.com/2016/benham-falls-or/" 
photolink="http://www.eyehike.com/pgallery/index.php?/category/25" 
routelink="http://www.eyehike.com/pgallery/index.php?/category/26" 
thumbnail="http://www.eyehike.com/pgallery/i.php?/galleries/Benham_Falls_Photos_OR/aaa-th.jpg" 
/> 
<marker mrk_id="3" name="Big Creek Falls" 
rank="1" mileage="1.6" address="" lat="46.0931" 
lng="-121.908" marker_type="" mcolor="green" 
permalink="https://www.eyehike.com/2016/big-creek-falls-wa/" 
photolink="http://www.eyehike.com/pgallery/index.php?/category/27" 
routelink="http://www.eyehike.com/pgallery/index.php?/category/28" 
thumbnail="http://www.eyehike.com/pgallery/i.php?/galleries/Big_Creek_Falls_Photos_WA/aac-th.jpg" 
/> 
<marker mrk_id="4" name="Burnt Bridge Creek" 
rank="1" mileage="6" address="" lat="45.6361" 
lng="-122.579" marker_type="" mcolor="blue" 
permalink="https://www.eyehike.com/2016/burnt-bridge-creek-trail-wa/" 
photolink="http://www.eyehike.com/pgallery/index.php?/category/35" 
routelink="http://www.eyehike.com/pgallery/index.php?/category/36" 
thumbnail="http://www.eyehike.com/pgallery/i.php?/galleries/Burnt_Bridge_Creek_Photos_WA/aaq-th.jpg" 
/> 
<marker mrk_id="5" name="Cape Falcon Trail" 
rank="1" mileage="7" address="" lat="45.7631" 
lng="-123.956" marker_type="" mcolor="blue" 
permalink="https://www.eyehike.com/2016/cape-falcon-or/" 
photolink="http://www.eyehike.com/pgallery/index.php?/category/39" 
routelink="http://www.eyehike.com/pgallery/index.php?/category/40" 
thumbnail="http://www.eyehike.com/pgallery/i.php?/galleries/Cape_Falcon_Photos_OR/aae-th.jpg" 
/> 
</markers>