2010-11-23 15 views
2

Ich habe eine globale Variable, die ich verwende, um eine Reihe von Informationen in einem Projekt zu speichern, an dem ich arbeite. Es ist ein Objekt mit verschiedenen Werten und ich schätze andere Objekte darin. Zum Beispiel ...

$.myVar { 
    currentProj : "Project 1", 
    allProjs : [], 
    toggleVar : 0 
} 

Jetzt, da das Programm läuft und ich die Dinge zu tun, ich hinzufüge, tatsächlich Arrays innerhalb allProjs. Ich möchte den Array-Index als den Namen des Projekts verwenden, und dann enthält es eine Reihe von Informationen. Hier sehen Sie, wie das Objekt aussieht, nachdem Sie das Programm einige Minuten lang ausgeführt haben.

(von Chrome Konsole kopiert):

$.myVar 
    Object 
    currentProj: "McB2" 
    toggleVar: 0 
    allProjs: Array[0] 
     McB1: Array[0] 
      length: 0 
      __proto__: Array[0] 
     McB2: Array[4] 
      0: "02070124" 
      1: "02030036" 
      2: "02090313" 
      3: "02090450" 
      length: 4 

Jetzt möchte ich diese Daten an eine PHP-Datei so mit .post $ passieren ich es zu JSON umwandeln kann und es auf dem Server zu speichern.

ich im Grunde dies gerade ausgeführt wird:

$.post('saveJSON.php', $.myVar, function(data) { 
    $('#dumpspace').html(data); 
}); 

Für das Debuggen Ich habe die PHP-Datei ist jetzt noch die Ausgabe:

print_r($_REQUEST); 

Jetzt würde ich ein mehrdimensionales Array erwarten, dass ich zu JSON konvertieren und dann speichern, aber alles, was es ausspuckt, ist:

Array ([currentProj] => McB2 [toggelVar] => 0) 

So kann ich sehen, dass es ist nicht die AllProj Abschnitt des Objekts senden, aber ich bin mir nicht sicher warum! Es scheint zu erscheinen, wenn ich das Objekt in der Konsole anschaue, also bin ich mir nicht sicher, was ich vermisse.

Jede Hilfe wird geschätzt.

Danke!

Klärung

Der erste Abschnitt, wo ich allProjs erklären, ist es möglich, dass ich etwas falsch es tue? Als ich Stringify laufen, habe ich am Ende mit einem ähnlich falschen Ergebnis auf:

JSON.stringify($.myVar) 
"{"currentProj":"McB2","allProjs":[],"toggleVar":0}" 

Antwort

2

Sie müssen das Objekt/Array in einen JSON-String .stringify. Alle "modernen" Browser unterstützen dies nativ mit JSON.stringify(obj). Wenn Sie auch die "ältere" Browserversion unterstützen müssen, gehen Sie bitte zu http://www.json.org und laden Sie die json2.js lib herunter, die die gleiche Funktionalität bietet. Wenn Sie umgekehrt eine JSONized-Zeichenfolge von einem Server erhalten möchten, müssen Sie entweder jQuery mitteilen, dass Sie eine JSON-Zeichenfolge erwarten, indem Sie 'json' an Ihren $.post()-Aufruf übergeben, oder Sie müssen analysieren die empfangenen Daten selbst, indem Sie erneut auf das Objekt JSON zugreifen. JSON.parse(json_string) wird ein Javascript-Objekt aus einer übergebenen JSON-Zeichenfolge zurückgeben.

+0

Danke für den Vorschlag. Ich habe versucht, das auszuführen und verpasse immer noch das allProj Stück des Objekts. Hat es etwas damit zu tun, wie ich das allProj-Array im Voraus deklariere? Ich habe den obigen Beitrag aktualisiert, um zu zeigen, wie ich meine globale Var deklariere. Ich vermute, dass dies der Punkt ist, an dem ich etwas falsch gemacht habe? – McB

0

Ich glaube, dass Sie zuerst Ihr Array in das JSON-Format konvertieren müssen, bevor Sie in PHP veröffentlichen.

Dies ist die Methode, die ich in der Vergangenheit verwendet haben:

var jsonOb = JSON.stringify(yourArray); 

$.post(
"yourPage.php", 
{jsonOb:jsonOb}, 
function(r){ 
//your success response 
} 
); 

Hope this funktioniert der Trick Bruder!

W.

+0

Danke für den Vorschlag! Stringify scheint auch nicht das erwartete Ergebnis auszugeben. Interessanterweise, wenn ich meine Key-Value-Paare nenne, sagt das Eltern-Array immer die Länge von 0. Jede Idee, warum das passieren würde? – McB

1

Ermittelt mein Problem. Als ich das Objekt ursprünglich deklarierte, machte ich allProj und Array, indem ich [] eingab. Wenn ich es als allProj: {} einfüge, funktioniert es perfekt! Danke für die Vorschläge, half mir meinen Fehler einzugrenzen.

-M

Verwandte Themen