2016-11-27 3 views
0

Ich versuche, die Ergebnisse einer Abfrage von PHP in ein Javascript-Objekt zu bekommen. Also in der Konsole sehe ich eine Fehlermeldung Uncaught SyntaxError: Unerwartete Token {in JSON auf Position 66. Ich weiß, das ist, weil ich versuche, ein JSON zu lesen, wenn die Variable eine Zeichenfolge ist. Das ist mein Dilemma. Im Folgenden finden Sie die Ergebnisse der Abfrage einer Textspalte thestartgeom genannt, die GeoJSON Objekte (Breitengrad und Längengrad) enthält:Wie String als Json in Javascript ausgeben?

{"type":"Point","coordinates":[40.752067565918,-73.9678421020508]} 
{"type":"Point","coordinates":[40.6908912658691,-73.9961242675781]} 
{"type":"Point","coordinates":[40.7666969299316,-73.9906158447266]} 

Der Grund, warum ich es speichern, wie eine Textspalte ist, weil es mehr als 100.000 Datensätze in der Datenbank sind und i Ich versuche nur die einzelnen Zeilen auszuwählen. Ich weiß, das ist eine Textspalte, aber ich möchte es als ein JSON-Objekt in Javascript lesen, so dass ich Zeile für Zeile gehen und die Breite und Länge (40.342, -73.221) ausgeben kann. Vergib mir, wenn ich jemanden mit meiner Frage beleidige, aber das nervt mich wirklich und SO ist meine letzte Zuflucht.

Mein Ziel ist es, nur die Koordinaten des Objekts in Javascript auszugeben.

Unten ist mein Code und jede Hilfe würde sehr geschätzt werden.

Meine PHP-Datei:

<?php 

$connect = pg_connect("host=127.0.0.1 dbname=d106 user=b16 password=cccC") or die("Could not connect: "); 
$result = pg_query($connect,"SELECT distinct thestartgeom FROM bike"); 
if (!$result) 
{ 
    echo "no results "; 
} 

while($row = pg_fetch_array($result)) 
    $coor = $row['thestartgeom']; 
    echo $coor; 
} 
pg_close($connect); 
?> 

Mein HTML/JS:

<html> 
<head> 
<title>Simple</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

<script> 

$.ajax({ 
    type: "GET", 
    dataType: "JSON", 
    url: "getstat.php", 
    data: {sataVariable: "here is some data send with GET method"}, 
    success: function(data) { 
     var r = data.responseText; 
     var j = JSON.parse(r); 
     var coords = j.coordinates; 

     document.writeln(coords); // attempting to take the coordinates and store it in a variable 
     for (i = 0; i < coords.length; i++) { 
      coords.forEach(function(entry){  
       // loop through the coordinates and output the lat,lng 
       var d = document.getElementById("fpcoords"); 
       d.innerHTML = d.innerHTML + "<br>" + "LatLng(" + entry[0] + "," + entry[1] + "));" 
      }); 

     }  
    } 
}); 
</script> 
</head> 
    <body> 
    </body> 


    </html> 
+1

Sie haben drei verschiedene JSON-Strings als Ausgang und es ist für JSON-Antwort nicht gültig. Es muss innerhalb eines Arrays sein, damit JSON gültig ist. – Justinas

+1

Einige sinnvolle Code-Einzug wäre eine gute Idee. Es hilft uns, den Code zu lesen und, was noch wichtiger ist, es hilft Ihnen, Ihren Code zu debuggen. ** [Werfen Sie einen Blick auf einen Kodierungsstandard] (http://www.php-fig.org/psr/psr-2/) zu Ihrem eigenen Vorteil. Sie werden möglicherweise aufgefordert, diesen Code in ein paar Wochen/Monaten zu ändern, und Sie werden mir am Ende danken. – RiggsFolly

+0

Und ich danke Ihnen für das @ RiggsFolly –

Antwort

0

Ihre erste JSON ist ungültig, die drei Objekte müssen in einem Array sein, das heißt, Sie müssen sie mit [] umgeben und durch Kommas trennen, ich würde auch Ihre JSON ein wenig formatieren, nur um die Menge zu begrenzen nicht mehr benötigte Daten:

<?php 
$connect = pg_connect("host=127.0.0.1 dbname=d106 user=b16 password=cccC") or die("Could not connect: "); 
$result = pg_query($connect,"SELECT distinct thestartgeom FROM bike"); 
if (!$result){ 
    echo '{"error":"no results"}'; 
} 

$points= array();  
while($row = pg_fetch_array($result)) 
    $coordinate = json_decode($row['thestartgeom'])->coordinates; 
    $p = new stdClass; 
    $p->lat = $coordinate[0]; 
    $p->long = $coordinate[1]; 
    array_push($points, $p); 
} 
$output = new stdClass; 
$output->points = $points; 
echo json_encode($output); 
pg_close($connect); 
?> 

Working PHP Sandbox: http://sandbox.onlinephpfunctions.com/code/0d3c4081edf097190e7233dc49b3f84cbe0ed094

Dies wird ausgegeben Ihre JSON als solche:

{ 
"points": [ 
    { 
    "lat": 40.752067565918, 
    "long": -73.9678421020508 
    }, 
    { 
    "lat": 40.6908912658691, 
    "long": -73.9961242675781 
    }, 
    { 
    "lat": 40.7666969299316, 
    "long": -73.9906158447266 
    } 
] 
} 

Dann einfach über sie in Javascript wie folgt iteriert:

var dataset = /* The JSON above... */ 
var pointList = document.getElementById('pointList'); 

dataset.points.forEach(function(p){ 
    var li = document.createElement('li'); 
    li.innerHTML = "LatLong: "+p.lat+", "+p.long; 
    pointList.appendChild(li); 
}); 

Eine Arbeits JSFiddle: https://jsfiddle.net/workingClassHacker/qkpp333z/1/

+1

Sie müssen ihm zeigen, wie man das Array erstellt und dann 'echo json_encode ($ thearray)' – RiggsFolly

+0

danke für die Antwort. Also hier ist die Sache, da ich die Abfrage von PHP als Zeichenfolge in JavaScript lesen, gibt es keine Kommas für jedes JSON-Objekt. In meinem PHP-Code sollte ich ein Komma nach jeder Zeile hinzufügen, die ich abfrage? –

+0

Nein, Sie sollten sie einfach in ein Array einfügen, schauen Sie sich das Beispiel in meiner Antwort an und den Link php sandbox. Wenn Sie ein Array oder ein Objekt mit einer Array-Eigenschaft in die Funktion json_encode einfügen, wird ein gültiger JSON für Sie erstellt. Aber du musst json_encode nur einmal aufrufen! Übergeben Sie es einfach ein komplettes Objekt, und Sie sind zu Hause frei :) – Espen

-1

Der String JSON ist nicht gültig. Der Server sollte eine korrekt formatierte JSON-Zeichenfolge zurückgeben. In Ihrem Fall würden Sie die drei Reihen in eckigen Klammern [ ] und setzen ein Komma , nach jedem Objekt einschließen müssen:

[ 
    { 
     "type":"Point", 
     "coordinates":[ 
     40.752067565918, 
     -73.9678421020508 
     ] 
    }, 
    { 
     "type":"Point", 
     "coordinates":[ 
     40.6908912658691, 
     -73.9961242675781 
     ] 
    }, 
    { 
     "type":"Point", 
     "coordinates":[ 
     40.7666969299316, 
     -73.9906158447266 
     ] 
    } 
] 

Auch in Zukunft würde ich die Daten kodieren, bevor sie in die Datenbank einfügen, so Sie müssen die Ausgabezeichenfolge nicht manuell formatieren, um eine gültige JSON-Antwort zurückzugeben.

+0

Hey Mann, danke für Ihre Antwort.Die JSON-Zeichenfolge stammt aus einer pgsql-Abfrage, weshalb sie so aussieht wie sie aussieht. –

+1

Der Benutzer meldete eine Ausnahme "Uncaught SyntaxError: Unexpected token {in JSON bei Position 66" und wir erhielten eine ungültige JSON-Antwort. als Kommentar selbst wäre es eine Antwort. Dies versucht, die Frage des Benutzers zu beantworten, egal wie offensichtlich es aussehen mag. – Fehniix

+0

@BrandonJ Was ist die JSON-Antwort, die Sie analysieren möchten? Was würde 'console.log (r)' in Ihrem Code zurückgeben? – Fehniix

Verwandte Themen