Anfängerfrage: parsererrorInvalid JSON
ralphi
- javascript
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
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.
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
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"); ?>
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.
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.
Das liegt daran, dass der Server nur mit »test« antwortet (die Zitatzeichen »« sind nicht Teil der Antwort),
eigentlich hab ich folgendes vor:
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
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.
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
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
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