2010-12-09 7 views
1

Ich habe in diesem Beitrag sieht: Jquery - JSON.stringify, array is empty und auch um mit anderen Foren geprüft und habe Google gesucht und habe nicht eine anständige Antwort auf diese Frage gefunden.JSON.stringify für ein Objekt leer [] gibt und nicht ein gefüllten {}

Grundsätzlich, wenn ich json.stringify auf mir gespeichert [] -Array verwenden, erstellt es die JSON-Zeichenfolge korrekt auf alles außer einem Array-Wert, der bei gespeichert wäre [2]. Nur ein Beispiel ist hier, wie die stringify Beiträge sowohl 1 und 2 in der Anordnung:

"1":{"doodleID":"716","tid":"26","outline":"sites/default/files/doodlekin/female24solid.swf","skin":"sites/default/files/doodlekin/female24face.swf","hair":"sites/default/files/doodlekin/female24hair.swf","misc":"sites/default/files/doodlekin/female24lips.swf","addlayer1":"","addlayer2":"","addlayer3":"","doodlename":"Mom","headsize":"95","flip":"true","skincolor":"E8B18C","skinblush":"sites/default/files/skin_color/e8b18c.swf","haircolor":"855D33","mouth":"sites/default/files/mouth/lips_color_d6570a_1.swf","neck":"sites/default/files/neck/pearl_necklace_solid.swf","neck_optlayer":"sites/default/files/neck/pearl_necklace_color.swf","neck_optcolor":"f8e5be"}, 
"2":[] 

Es schreibt man richtig, aber wenn es die Werte auf 2 kommt nicht richtig in eine json Zeichenfolge analysiert werden. Sie wissen also, wie das gespeicherte Array sowohl bei 1 als auch 2 aussieht. Hier (das Array ist größer, ich denke nur, dass dies alles sein sollte, um zu sehen, was schief läuft. Wenn nicht, lassen Sie es mich wissen. Es funktioniert perfekt mit 1 und nicht 2):

'1' ... 
    'doodleID' => "716" 
    'tid' => "26" 
    'outline' => "sites/default/files/doodlekin/female24solid.swf" 
    'skin' => "sites/default/files/doodlekin/female24face.swf" 
    'hair' => "sites/default/files/doodlekin/female24hair.swf" 
    'misc' => "sites/default/files/doodlekin/female24lips.swf" 
    'addlayer1' => "" 
    'addlayer2' => "" 
    'addlayer3' => "" 
    'doodlename' => "Mom" 
    'headsize' => "95" 
    'flip' => "true" 
    'skincolor' => "E8B18C" 
    'skinblush' => "sites/default/files/skin_color/e8b18c.swf" 
    'haircolor' => "855D33" 
    'mouth' => "sites/default/files/mouth/lips_color_d6570a_1.swf" 
    'neck' => "sites/default/files/neck/pearl_necklace_solid.swf" 
    'neck_optlayer' => "sites/default/files/neck/pearl_necklace_color.swf" 
    'neck_optcolor' => "f8e5be" 
'2' ... 
    'doodleID' => "291" 
    'tid' => "27" 
    'outline' => "sites/default/files/doodlekin/male66solid.swf" 
    'skin' => "sites/default/files/doodlekin/male66face.swf" 
    'hair' => "sites/default/files/doodlekin/male66hair.swf" 
    'misc' => "" 
    'addlayer1' => "" 
    'addlayer2' => "" 
    'addlayer3' => "" 
    'doodlename' => "John" 
    'headsize' => "95" 
    'skincolor' => "EEBF7C" 
    'skinblush' => "sites/default/files/skin_color/eebf7c.swf" 
    'haircolor' => "353535" 
    'eyes' => "" 
    'eyes_shadow' => "" 
    'eyes_optlayer' => "" 
    'eyes_optcolor' => "" 
    'mouth' => "sites/default/files/mouth/goatee_solid.swf" 
    'mouth_optlayer' => "sites/default/files/mouth/goatee_color.swf" 
    'mouth_optcolor' => "646464" 

Meine Frage ist, warum gespeichert wird [2] von gespeichert entfernt wird, wenn ich benutze: postdata = JSON.stringify (gespeichert);

ABER das gespeicherte Array existiert immer noch, wenn es 2 zeigt. Jede Hilfe wäre großartig, und wenn Sie mehr Einsicht brauchen, werde ich es Ihnen geben. Der Grund, warum ich eine globale Variable verwende, liegt darin, dass ich ungefähr 10 verschiedene Funktionen verwende, die diese Variable aufrufen müssen, und ich möchte sie durch den Designer nicht aus den Augen verlieren.

UPDATE: Dieses Problem ist nur bei Firefox aufgetreten. Ich führe Firefox 4 Beta 7. Jede Chance, die ein Grund sein könnte, warum json.stringify nicht richtig funktioniert? IRT Arbeiten mit Chrome und IE 8.

UPDATE 2: Code für ganze sparen:

function userSavedDoodlekin(flag) 
{ 
    // For leave page check 
    addToCartPage = "true"; 

    pID = $("#neededInfo .productID").text(); 
    tID = $("#neededInfo .templateID").text(); 
    pAttr = new Object(); 
    tBg = $("#neededInfo .templateBG").text(); 
    tCoords = $("#neededInfo .templateCoords").text(); 

    $("#neededInfo .productAttr").each(function(){ 
     pAttr[$(this).attr('alt')] = $(this).text(); 
    }); 

    store_doodlekin("product", pID, "productID"); 
    store_doodlekin("product", pAttr, "productAttr"); 
    store_doodlekin("product", tID, "templateID"); 
    store_doodlekin("product", tBg, "templateBG"); 
    store_doodlekin("product", tCoords, "templateCoords"); 

    // Data for post "json" serialized 
    postData = JSON.stringify(saved); 
    flag = ''; 

    // Check for flag 
    if(flag == "true") 
    { 
     flag = '?saved=true'; 
    } 

    // Test before launch 
    // alert(postData); 
    // alert(dump(saved)); 

    // Save the doodlekin and start another loop for the next one to save if another in line. 
    // Data Sent Back: object.status = (1 or 0), object.data = (error message) 

    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     data: "data="+postData, 
     url: "/designer/save", 
     success: function(obj){ 
      if(obj.status == 1){ 
       // alert(obj.data); 
       window.location = "/cart"; 
      } 
      else if(obj.status == 0){ 
       alert(obj.data); 
      } 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      alert("textStatus: "+textStatus); 
      alert("errorThrown: "+errorThrown); 
     } 
    }); 

} 
+0

Es ist wahrscheinlich ein Tippfehler irgendwo, möglicherweise in den Daten selbst. Können Sie Code eingeben, wo der JSON erstellt und angezeigt wird? Komplett mit Klammern, Klammern und Semikolons. Das Schreiben eines funktionierenden (oder scheiternden) Problems mit minimalem Problem zeigt oft, wo das Problem liegt. –

+0

Überprüfen Sie die Updates auf den Post, nur weil ich sehe, dass es nicht so ist, weil ich jetzt weiß, dass es mit Firefox 3.5 + 3.6 und mit IE 8 und Chrome funktioniert. Ich habe NUR das Problem im Firefox auf meinem Arbeits-PC, Firefox 4 Beta 7. Außerdem, wenn dieses Array gespeichert wird, funktioniert es völlig gut auf den Rest der Browser. – John

+0

Außerdem habe ich gerade realisiert, was du über Prototype gesagt hast und nein, ich bleibe bei der Programmierung immer bei jQuery. Und das ist auf Version 1.3.2 in Drupal. – John

Antwort

0

Verwenden Sie eine ältere Version von Prototype? Ich hatte ein ähnliches Problem, bei dem Prototype (oder eine andere Bibliothek) inkompatible .toJSON-Methoden hinzufügt, die stringify unterbrechen.

+0

http://www.JSON.org/json2.js 2010-08-25 Dies ist, wenn das letzte Update auf die aktuelle Version gemacht wurde, die ich verwende. Wenn Sie mein Update überprüfen, ATM funktioniert es gut in Chrome und IE, ich bin nur nicht sicher, ob es, weil ich den Firefox 4 Beta 7 verwende, oder wenn es etwas ist, das das Plugin tut, weil es nur gelegentlich passiert . – John

Verwandte Themen