ralphi: Anfängerfrage: parsererrorInvalid JSON

Hallo Leute,

irgendwie peinlich, aber ich komm nicht weiter.

Ich bau mir mit JS ein Json zusammen:

{"anzahl":"1","id":"33","produkt":"Pizza1"},{"anzahl":"5","id":"34","produkt":"Pizza2"}

oder auch
[{"anzahl":"1","id":"33","produkt":"Pizza1"},{"anzahl":"5","id":"34","produkt":"Pizza2"}]

mit

$.ajax({  
	url : 'test.php',  
	data : feld, // post the created object here  
	type : 'GET',  
	dataType : 'json',  
	success : function(data) { alert(data); },  
	error: function (jqXHR, textStatus, errorThrown) {  
		alert(jqXHR +textStatus+ errorThrown );	}  
});

Bekommen tu ich den Erroralert:
[object XMLHttpRequest]parsererrorInvalid JSON: test

mit test.php
<?php echo "test"; ?>

Vielleicht spielt die Jquery Version 1.4.1 eine Rolle.
( Unter anderen Versionen fuzt 'live' nicht. Mit 'on' bekomm ich die in den Warenkorb angefügten Elemente, nicht angesprochen. Mit live klappts ganz gut, nur halt unter 1.4.1.).

Kann mir jemand helfen?
Viele Grüße aus LA

--
ralphi
  1. Meine Herren,

    Bekommen tu ich den Erroralert:
    [object XMLHttpRequest]parsererrorInvalid JSON: test

    Diese Fehlermeldung bezieht sich nicht auf diese JSON-Objekte:

    {"anzahl":"1","id":"33","produkt":"Pizza1"},{"anzahl":"5","id":"34","produkt":"Pizza2"}

    oder auch
    [{"anzahl":"1","id":"33","produkt":"Pizza1"},{"anzahl":"5","id":"34","produkt":"Pizza2"}]

    Sondern, auf die PHP-Ausgabe:

    mit test.php
    <?php echo "test"; ?>

    Und das ist klar, weil »test« kein gültiges JSON ist. »"test"« dagegen wäre ein gülter JSON-String.

    1. Hi,

      Meine Herren,

      zumindest ist der Begriff 'Anfängerfrage' richtig ;-)

      Sondern, auf die PHP-Ausgabe:

      mit test.php
      <?php echo "test"; ?>

      Und das ist klar, weil »test« kein gültiges JSON ist. »"test"« dagegen wäre ein gülter JSON-String.

      hab jetzt die php abgeändert auf:
      var_dump(json_decode($_POST['feld']));

      auch im JS
      data : {"feld":feld.toString()},

      bekomme
      [object XMLHttpRequest]parsererrorInvalid JSON: NULL

      hmm - was könnte es sonst noch sein?
      ich arbeite mit Json zum ersten mal :-(. Sonst nehmem ich immer $.get(), was ohne probleme fuzt.

      Viele Grüße aus LA

      --
      ralphi
      1. Meine Herren,

        zumindest ist der Begriff 'Anfängerfrage' richtig ;-)

        dann gerne nochmal langsam:

        Du hast einerseits vor ein JSON-Objekt an den Server zu schicken, darüber hinaus soll der Server wieder mit einem JSON-Objekt antworten. JSON-Objekte lassen sich aber nicht ohne weiteres über HTTP verschicken, sie müssen erst serialisiert (in eine Zeichenkette umgewandelt werden) damit sie verschickt werden können. jQuery versucht dir so viel wie möglich von der Arbeit abzunehmen und das Kodieren (beim Senden) und das Dekodieren (beim Empfangen) automatisch zu vollziehen. Dein Fehler tritt beim Empfangen der Daten vom Server auf, also wenn jQuery für dich versucht die Antwort des Servers zu dekodieren. Das liegt daran, dass der Server nur mit »test« antwortet (die Zitatzeichen »« sind nicht Teil der Antwort), ein valider JSON-String muss aber von doppelten Hochkommata umschlossen sein, der Server müsste also eigentlich mit »"test"« antworten, damit jQuery ihn automatisch dekodieren kann.

        Dein PHP-Skript muss also wie folgt angepasst werden:

        <?php echo "\"test\""; ?> oder <?php echo '"test"'; ?>

        Ein JSON-Objekt besteht aber typischerweise nicht nur aus JSON-Strings, sondern auch aus Zahlenwerten, Objekten und Listen, dafür bietet PHP die Komfort-Funktion json_encode an, die sich automatisch darum kümmert, ein Objekt in valide JSON-Syntax zu serialisieren:

        <?php echo json_encode("test"); ?>

        1. hi,

          mal sehen, ob ich überhaupt die richtigen befehle habe.

          Du hast einerseits vor ein JSON-Objekt an den Server zu schicken, darüber hinaus soll der Server wieder mit einem JSON-Objekt antworten.

          • falsch

          JSON-Objekte lassen sich aber nicht ohne weiteres über HTTP verschicken, sie müssen erst serialisiert (in eine Zeichenkette umgewandelt werden) damit sie verschickt werden können.

          • ja, irgend ein equivalent zu ?feld=wert&.. (bei get)

          Das liegt daran, dass der Server nur mit »test« antwortet (die Zitatzeichen »« sind nicht Teil der Antwort),

          • der server sollte eigentlich nur OK sagen.

          eigentlich hab ich folgendes vor:

          • ich habe ein Div (HTML seite).
          • in das Div (Warenkorb) schiebt der User mit
                   $("#Tab_korb").append(tr);
              neue Datensätze rein.
          • nach Abschluss (Warenkorb), möchte ich die Datensätze weiter verarbeiten (php file):
                 - Drucken
                 - E-Mail schreiben
                 - In DB
          • An das HTML, kommt lediglich (bestenfalls) ein Div zurück zB.'Vorgang abgeschlossen'

          Also kein Json zurück.
          Hinzu aber schon Json, weil die Datensätze varieren und mit getvars das sehr umständlich (unschön) wäre.
          nur Json (JS) -> php -> phpArray
          (JS) zurück <- php text

          Viele Grüße aus LA

          --
          ralphi
          1. Meine Herren,

            mal sehen, ob ich überhaupt die richtigen befehle habe.

            Du hast einerseits vor ein JSON-Objekt an den Server zu schicken, darüber hinaus soll der Server wieder mit einem JSON-Objekt antworten.

            • falsch

            Aah, da liegt der Hund begraben.

            In dem Fall musst du bei dataType auch nicht "json" angeben. Denn dataType spezifiziert den Antwort-Typen, den du vom Server erwartest.

            1. hehehe,

              Aah, da liegt der Hund begraben.

              wenn man von Paris spricht und Gummis meint ;-)

              ich danke dir. wär ich nicht so schnell drauf gekommen.
              jetzt fuzts so wie ichs kenne. Ich dachte wirklich der data-type wär für wandeln in die hinrichtung.

              Viele Grüße aus LA

              --
              ralphi
              1. Zusammenfassung für Alle:

                in der HTML datei (JS)

                // zusammengebaute Datensätze  
                 feld = [{"anzahl":"1","id":"33","produkt":"Pizza1"},{"anzahl":"5","id":"34","produkt":"Pizza2"}]  
                  
                 $.post("test.php",	  
                  {  
                	feld:feld  
                  },  
                  function(data,status){  
                   alert("Data: " + data + "\nStatus: " + status);  
                });
                

                in der PHP Datei

                <?php  
                $myArray = json_decode($_POST['feld'], true);  
                print_r($myArray);		// array anzeigen  
                echo $myArray[0][produkt] ."\n"; // einzelnes Element  
                ?>
                

                So funktionierts bei mir ;-)
                Wenn man's weiß is einfach.

                Viele Grüße aus LA

                --
                ralphi
              2. Hallo,

                Ich dachte wirklich der data-type wär für wandeln in die hinrichtung.

                und ich dachte, bei uns gäb's keine Hinrichtungen mehr. Uiuiui ...

                *scnr*
                 Martin

                --
                Wenn alle das täten, wass sie mich können,
                käme ich gar nicht mehr zum Sitzen.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(