2011-01-14 4 views
1

Ich habe mit JSON-Daten gearbeitet, Jquery's Methode getJSON, um die serverseitigen PHP-Skripten zu verwenden, um Daten zu erhalten. Jetzt versuche ich mit JSON-Daten zu arbeiten, die von einer PHP-Funktion zurückgegeben werden, und ein JavaScript-Ereignis oder eine URL würde diese Daten erhalten. Für eine Javascript-Funktion, um auf PHP-Daten zuzugreifen, muss es einen Rückruf haben, und ich bin nicht in der Lage herauszufinden, wie ich einen Rückruf erstellen soll.Geben Sie JSON-Daten aus PHP zurück und verwenden Sie Javascript

Code Bestehende, das ich in der PHP-Datei (getData.php) kann/Rückkehr JSON Ausgabe Echo und würde Daten geben, dass ich meine JavaScript-Datei haben wie diese

{"count":3,"items":[{"myTab_ID":"1","myTab_xam":"test1","myTab_rank":"21"}, 
{"myTab_ID":"2","myTab_xam":"test2","myTab_rank":"22"}, 
{"myTab_ID":"3","myTab_xam":"test3","myTab_rank":"22"}]} 

Nun, das würde machen aussehen würde der Ruf, die ein wenig twitter wie,

<html> 
    <head> 
     <script type="text/javascript" src="http://myserver/getdata.php"> 
     </script> 
    </head> 
</html> 

Jetzt wäre, wenn ich diese html-Datei ausführen, bekomme ich einen Fehler

"Error: invalid label Source File: http://myserver/getData.php Line: 1, Column: 1 Source Code: {"count":3,"items":[{"myTab_ID":"1","myTab_xam":"test1","myTab_rank":"21"},{"myTab_ID":"2","myTab_xam":"test2","myTab_rank":"22"},{"myTab_ID":"3","myTab_xam":"test3","myTab_rank":"22"}]}"

sagen

in der Fehlerkonsole.

Ich bin ein wenig glücklich, dass ich atleast die Daten von meiner PHP-Seite in die HTML-Datei bekommen kann, aber jetzt frage ich mich, wie würde ich diese zurückgegebenen JSON-Daten verwenden. Wie würde ich die Callback-Funktion entwickeln, die die JSON-Daten zurückgibt?

> ------code in getData.php--------------- 
> 
> $con = 
> mysql_connect("localhost","peter","abc123"); 
> if (!$con) { die('Could not 
> connect: ' . mysql_error()); } 
> 
> mysql_select_db("my_db", $con); 
> 
> $result = mysql_query("SELECT * FROM 
> Persons"); 
> 
> while($row = 
> mysql_fetch_array($result)) { 
> $data[] = $row; } 
> 
> echo json_encode($data); 
> 
> --------------end - getdata.php-------------- 
> 
> ---------code in getJson.html------------- html> <head> 
> <script type="text/javascript" 
> src="http://myserver/getdata.php"> 
> </script> </head> 
> 
> </html> 
> -----------------------end- getJson.html---------- 

Ich bin mir nicht sicher, wie ein Rückruf funktionieren würde, um die Daten zu erhalten?

+0

Wenn Sie Code in Ihre Fragen einfügen, müssen Sie jede Zeile um 4 Leerzeichen einrücken. – Pointy

+0

@Pointy - Sie können es auch markieren und auf die Schaltfläche {} klicken –

Antwort

1

Sie bekommen diese Fehler, weil die JSON Konstruktion an den JavaScript-Parser einfach fehlerhaft ist. Nach einer nackten offenen geschweiften Klammer ({) erwartet Javascript eine Aussage.

Was zu erwarten, dass Ihr Code scheint, ist, dass die JSON nicht einfach als in einer Seite <script> aufgenommen werden, sondern dass sie aktiv durch einen XMLHttpRequest (das heißt „Ajax“) abgeholt werden. Das ist wirklich üblich und es unterscheidet sich ziemlich von dem, was Ihnen ein <script> Tag gibt. In solchen Situationen wird die JSON-Konstruktion explizit vom clientseitigen Code analysiert und für, was auch immer gewünscht ist, verwendet.

+0

Richtig; Wie es ist, versucht Ihre HTML-Seite, JSON als JavaScript einzuschließen, was fehlschlägt. Sie müssen es einer Variablen zuweisen, entweder über einen AJAX-Aufruf, oder die PHP-Seite muss es als Variable ausgeben ('var myData = {...}'). – MidnightLightning

+0

Wie kann ich die Ausgabe als Variable zuweisen? gebe ich einfach den json_encode ($ data) zurück ?? oder hätte ich etwas Javascript in meinem PHP schreiben und das zurückgeben ?? – macha

+0

Wenn der PHP-Code die JSON mit ein wenig Javascript umschrieb, würde das gut funktionieren, wie andere bemerkt haben. Habe einfach das PHP-Code-Präfix JSON mit dem JavaScript-Code, um eine Variable zu deklarieren, wie 'var x = {json stuff here};' – Pointy

2

Sie Ihren Kopf in getData.php nicht vergessen:

header('Content-type: application/json'); 

Some useful examples in the php manual

+0

Wenn ich diesen Header hinzufüge, wird die Datei zum Download angeboten. Sobald ich eine Seite geladen habe, bekomme ich eine Aufforderung zum Herunterladen der Datei getData.php. Ist das seltsam? – macha

+0

Ist das, wenn Sie versuchen, die Ausgabe über einen Browser anzuzeigen? Es gibt verschiedene Methoden, Browser dazu zu bringen, application/json zu interpretieren - z. http: //adallow.wordpress.com/2008/10/13/viewing-applicationjson-mime-type-docs-in-deinem-Browser/ – Ken

0

, wenn Sie die json codiert $ data Array avaliable sein wollen in Javascript, dies zu tun:

<?php $jencodeddata = json_encode($data); ?> 

in der HTML-Datei ..

<script type="text/javascript"> 
function doSOmething() 
{  
var jsencodedata = '<?php print $jencodeddata ?>'; 
you can loop through jsencodedata here.... 
} 
</script> 

Hoffnung, das hilft.

Verwandte Themen