2012-04-02 5 views
0

Ich habe eine Funktion, die json (networks_function.php baut einige Arrays und kodiert sie als json) zurückgibt:Json nicht konsistent zwischen Alarm Aussage und Funktionen

var json; 
$(document).ready(function(){ 
    $.post("network_function.php", function(data) { 
     json = data; 
     alert(json); 
    }); 
}); 

ich die json Variable auf eine neue Funktion übergeben die interpretiert es nicht richtig. Wenn ich jedoch den Text der Alert-Anweisung kopiere und ihn in die zweite Funktion fest einprogrammiere (und ihn gleich der json-Variable setze), funktioniert er. Ich bin mir sicher, dass dies kein Problem mit variablem Umfang ist. Weiß jemand, warum das sein könnte?

+1

nie Warnung zum Debuggen verwenden. Verwenden Sie stattdessen 'console.log (data)'. Wenn die Konsole ein Objekt anzeigt, ist es ein guter JSON. – Joseph

Antwort

0

Es denkt, dass es nicht JSON ist. Gerade jQuery sagen, dass es JSON-Daten ist:

var json; 
$(document).ready(function(){ 
    $.post("network_function.php", function(data) { 
     json = data; 
     alert(json); 
    }, "json"); 
}); 

Der Grund, dass kopieren und einfügen und es funktioniert, ist, weil ein JSON-String, wenn sie in einem JS Kontext eingefügt ein Objektliteral ist. Wenn Sie ein tatsächliches Objekt alarmieren (worauf Sie aufmerksam machen möchten), sehen Sie abhängig vom Browser "Objekt" und eventuell ein paar Debugging-Informationen.

Beachten Sie, dass Sie könnte (und sollte) auch json Header in Ihre PHP-Datei

header("Content-Type: application/json"); 
+0

Funktioniert immer noch nicht. Ich habe die "json" Zeichenfolge am Ende der jQuery eingefügt, aber nichts geändert. Ich habe es immer noch aus der Alarmfunktion kopiert und es hat funktioniert, also bin ich mir immer noch nicht sicher, was los ist. – user1114864

+0

@ user1114864 Sorry, habe gerade gemerkt, dass ich den JSON an die falsche Stelle gesetzt habe. Habe jetzt meine Antwort bearbeitet, und es sollte funktionieren. – Corbin

+0

Gearbeitet! Riesige Hilfe! – user1114864

0

Ich sehe, Sie sind mit PHP im Backend senden. Sie könnten dies tun wollen:

Backend:

$dataToSend = array("item1"=>"data1","item2"=>"data2"); 
echo json_encode($dataToSend); 

Anschließend können Sie die "Daten" in jQuery als JSON-Objekt erhalten. Wenn PHP als String zurückgibt Just do:

json = JSON.parse(data); 

Ihre PHP ist meist nicht json richtig zurückkehren, so dass die Anführungszeichen um die Zeichenfolge in Ihrem Echo könnte ein Problem sein. Dies wird mühsam, die richtigen Anführungszeichen in PHP zu verwenden, wenn JSON zurückgegeben wird, so dass die Verwendung eines json_encode() für ein Array der einfachste Weg wäre.

Verwandte Themen