RobRobson: mal ein Objekt und mal nicht

Hallo,

ich baue eine Webapplikation um, von Zeilenbasiert auf OOP/MVC (nur innerhalb von php).
Über ein ajax request wird ein Objekt geladen welches in beiden als response in Firebug auch richtig angezeigt wird: ~~~javascript "erstes":"06-06-2011","letztes":"15-10-2011","i":3,"1":"1314309600","2":"1318197600","3":"1318629600"
}

  
Aber nur in der alten ApplikationsVersion wird dieses Objekt richtig erkannt, in der neuen nicht. Dessen Aufruf in JS sieht so aus:  
`$.post('index.php&trigger=blubb', function(json) { alert(json.erstes); }, 'JSON');`{:.language-javascript}  
  
In der neuen Anwendung kommt nur ein 'undefined' in der der msgbox an, in der alten Anwendung steht richtig: 06-06-2011 da.  
  
Ein weiterer Unterschied zwischen den apps ist noch, dass die alte in ANSI Dateien abgelegt war und die neue in UTF8 Dateien. Darum hab ich noch versucht die Ausgaben nach utf8 zu verbiegen. Aber das hat auch alles nichts geändert.  
  
Wenn n och jemand eine Idee hat, auch wo ich noch nach Fehlern suchen kann. Ich würde mich sehr freuen! ;)  
  
  
Gruß,  
Robson
  1. Hallo,

    $.post('index.php&trigger=blubb', function(json) { alert(json.erstes); }, 'JSON');

    Versuch mal, 'json' klein zu schreiben. Ich weiß nicht, ob jQuery 'JSON' als gleichwertig erkennt.
    http://api.jquery.com/jQuery.ajax/
    http://api.jquery.com/jQuery.post/

    Andernfalls sollte der MIME-Typ der Server-Rückgabe stimmen: application/json

    Mathias

    1. Hallo,

      $.post('index.php&trigger=blubb', function(json) { alert(json.erstes); }, 'JSON');

      Versuch mal, 'json' klein zu schreiben. Ich weiß nicht, ob jQuery 'JSON' als gleichwertig erkennt.
      http://api.jquery.com/jQuery.ajax/
      http://api.jquery.com/jQuery.post/

      Andernfalls sollte der MIME-Typ der Server-Rückgabe stimmen: application/json

      Mathias

      Hi Mathias,

      Danke für den Hinweis. Hatte ich noch nie gelesen das man einen MIMEtype für JSON setzen kann. Hab ich bisher auch noch nie gemacht, hat immer ohne geklappt. Naja, habs jetzt mal mit eingebaut.
      Aber weder das, noch die die Kleinschrift hat leider etwas geändert.

      Ich konnte jetzt aber herausfinden das sich wohl scheinbar irgendwelche Sonderzeichen in den response-string mit einschmuggeln die eine Umwandlung nach Objekt (auch mit eval()) verhindern.

      Denn, wenn die callbackfunktion "function(json) { alert(json.erstes); }" erweitert wird auf: "function(json) { arr = json; alert(arr); }" und dieses 'arr' eine Globale Variable des Typs Array ist. Zeigt alert(arr) vor der eigentlichen response noch 4 Quadrate an. Die bestimmt der Grund sind! Alle beteiligten Funktionen hab ich jetzt zigfach durchgesehen und einzelen durchgecheckt und keinen Hinwes finden können. :-/

      Viele Grüße,
      Rob

      PS: jetzt gehts einfach so im Firefox. Beim Chrome lädt die Seite aber garnicht. Da ich aber auch nichts geändert habe, trau ich dem Frieden noch nicht.

      1. Moin!

        Ich konnte jetzt aber herausfinden das sich wohl scheinbar irgendwelche Sonderzeichen in den response-string mit einschmuggeln die eine Umwandlung nach Objekt (auch mit eval()) verhindern.

        Denn, wenn die callbackfunktion "function(json) { alert(json.erstes); }" erweitert wird auf: "function(json) { arr = json; alert(arr); }" und dieses 'arr' eine Globale Variable des Typs Array ist. Zeigt alert(arr) vor der eigentlichen response noch 4 Quadrate an. Die bestimmt der Grund sind! Alle beteiligten Funktionen hab ich jetzt zigfach durchgesehen und einzelen durchgecheckt und keinen Hinwes finden können. :-/

        Vermutlich eine BOM.

        Da du ohnehin mit UTF-8 arbeiten musst (zumindest dringend solltest, aufgrund von AJAX), solltest du unbedingt alle BOM aus deinen Dateien rauswerfen - dieses Kennzeichen ist für UTF-8 überflüssig.

        - Sven Rautenberg

        1. Moin Sven,

          Vermutlich eine BOM.
          Da du ohnehin mit UTF-8 arbeiten musst (zumindest dringend solltest, aufgrund von AJAX), solltest du unbedingt alle BOM aus deinen Dateien rauswerfen - dieses Kennzeichen ist für UTF-8 überflüssig.

          Waahhhnnssinn! Das wars. Hab jetzt alle Dateien von UTF8 nach UTF8 ohne BOM umgespeichert und nu rennts überall. Freu mich übelst. Irgenwann verliert man ja den Glauben.. ;)

          Viele Grüße,
          Rob

          1. Das wars. Hab jetzt alle Dateien von UTF8 nach UTF8 ohne BOM umgespeichert und nu rennts überall.

            Die Freude hielt aber nicht sehr lange an.
            Zwar geht jetzt dieser eine Punkt, dafür funktioniert der ganze Rest der Webseite nicht mehr.
            Alle Aufrufe ala:
            $.post('index.php&trigger=blubb' , function(data) { $('content').html(data); } ); schlagen fehl!

            Dagegen funktionieren weiterhin Aufrufe ala:
            $.post('index.php' , function(data) { $('content').html(data); } );

            auch wenn die die Übergabeparameter im post statt im get versendet werden ($.post('index.php' , {trigger:'blubb'} , function(data) { $('content').html(data); } );
            ) funktionierts nicht*.

            Viele Grüße,
            Rob

            (*) nicht funktionieren heißt: im container "content" kommt nichts an, obwohl die richtige respons vom Server im FF ankommt. Ein im Callback eingebettetes alert('xyz') wird auch nie ausgegegen. Fehler werden keine angezeigt.

            1. ..hoffentlich jetzt zu Ende. Der modifizierte header mimetype "application/json" war noch falsch aktiv. :)

    2. Hi, nochmal.

      Ich muss mich korrigieren.

      Versuch mal, 'json' klein zu schreiben. Ich weiß nicht, ob jQuery 'JSON' als gleichwertig erkennt.
      Mathias

      führt im FF dazu das die json response jetzt wie gewünscht ein Objekt ist. Aber es führt auch dazu das Googel Chrome garnichts mehr anzeigt. Und der Chrome zeigt ja keine JS Fehler an .. Scheisse! :-/

      Aber Danke für den Hinweis!!

      Viele Grüße,
      Rob

      1. Hallo,

        Und der Chrome zeigt ja keine JS Fehler an .. Scheisse! :-/

        Preferences -> Tools -> Developer Tools -> Scripts

        Grusz,
        Christopher