Fehler bei Verwendung von JSON aus AJAX in Javascript

Zerberus777

Mitglied
Hallo,

ich lasse mir über eine AJAX-Anfrage ein Array als JSON zurückgeben:
Code:
$rueckmeldung = array("verfuegbar"=>$verfuegbar, "fehler"=>'Sie sind bereits abgemeldet!');
echo json_encode($rueckmeldung);
Dieses JSON-Objekt möchte ich in Javascript mit
Code:
jsverfuegbar = JSON.parse(xhr.responseText);
Javascript-tauglich in ein Array zurückwandeln. Dabei erhalte ich jedoch den Fehler "SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data".
Ich habe bereits lange gegoogelt, jedoch ohne Erfolg. Meine Dateien sind alle mit "UTF-8 ohne BOM" kodiert:

Testweise habe ich mir in Javascript mit
Code:
jsverfuegbar = {"verfuegbar":"4","fehler":"Sie sind bereits abgemeldet!"};
console.log(jsverfuegbar);           
console.log(xhr.responseText);           
console.log(JSON.parse(xhr.responseText));
mal angeschaut, was so ankommt. Das Ergebnis der Console:
Code:
Object { verfuegbar: "4", fehler: "Sie sind bereits abgemeldet!" }
    int(1)
{"verfuegbar":"4","fehler":"Sie sind bereits abgemeldet!"}
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
Ich habe auch schon mit einfachen, doppelten (und gar keinen) Anführungszeichen experimentiert, aber ohne Erfolg.

Wer kann mir bitte auf die Sprünge helfen ;) ?

Gruß

Zerberus
 
Du möchtest also einen JSON-Object nochmal in JSON parsen? Gut das es nicht funktioniert:

So funktionierts:
Code:
var jsverfuegbar = '{"verfuegbar":"4", "fehler":"Sie sind bereits abgemeldet!"}';
   
console.log(JSON.parse(jsverfuegbar));


Versuche es doch mal ohne JSON.parse
 
Eventuell habe ich mich mißverständlich ausgedrückt. Ich versuche es nochmal:
Ich rufe per AJAX eine PHP-Datei auf. In dieser Datei erstelle ich ein Array, wandele es in JSON um und lasse es zurückgeben:
Code:
$rueckmeldung = array("verfuegbar"=>$verfuegbar,"fehler"=>'Sie sind bereits abgemeldet!');
echo json_encode($rueckmeldung);
In der aufrufenden Datei erhält die Variable response den Rückgabewert von AJAX:
Code:
response = xhr.responseText;           
console.log(response);       
console.log(JSON.parse(response));
Die erste Konsolenausgabe zeigt den reinen Rückgabewert, bei Ausgabe der geparsten Rückgabe kommt es zum Fehler:
Code:
int(0)
0{"verfuegbar":2,"fehler":"erfolgreich eingebucht"}
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
Oder einfach gefragt: Wie schaffe ich es, aus der aufgerufenen PHP-Datei mit AJAX (und JSON?) ein Array zurückzugeben und dieses Javascript-tauglich zu konvertieren?

Schönen Abend noch

Zerberus
 
Also, deine Vorrangehensweise ist richtig. Ich vermute mal, dass in der PHP-Datei irgendwo einen echo zu viel gibt. Da diese dem json_encode eine 0 vorne anhängt.
 
Okay, war in der Tat noch eine Echo-Ausgabe vorher. Ohne diese kommt jetzt
Code:
int(0)
{"verfuegbar":3,"fehler":"erfolgreich eingebucht"} 
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
also leider immer noch Fehler...
 
habe jetzt mal ganz simple Testdateien erstellt:
Code:
<script>
    var xhr = new XMLHttpRequest();
    xhr.open("get","rueckgabe.php", true);
    xhr.onreadystatechange = function() {
        if(xhr.readyState === 4) {
            console.log(xhr.responseText);
            response = JSON.parse(xhr.responseText)
            console.log(response.name);
            console.log(response.alter);
        }
    };
    xhr.send();
</script>
und
Code:
<?php
$rueckgabe = array("name"=>'müller',"alter"=>20);
echo json_encode($rueckgabe);
?>
Damit funzt es, werde also morgen den Fehler suchen...

Gruß

Zerberus
 
Ich schätze, ich habe den Fehler gefunden!

Das int(1) bzw. int(0), was in den Console-Ausgaben ersichtlich war, gehört zu einem var_dump, welches ich zu Testzwecken in der aufgerufenen PHP-Datei hatte. Ich wäre niemals davon ausgegangen, daß dies Bestandteil des zurückgegebenen JSON-Objektes ist/wird, da ich ja mit "echo json_encode($rueckmeldung);" lediglich den Inhalt von $rueckmeldung zurückgeben wollte.
Jetzt tritt der Fehler nicht mehr auf und ich kann weitermachen.

Danke für Eure Unterstützung

Zerberus
 
..var_dump.... Ich wäre niemals davon ausgegangen, daß dies Bestandteil des zurückgegebenen JSON-Objektes ist/wird, da ich ja mit "echo json_encode($rueckmeldung);" lediglich den Inhalt von $rueckmeldung zurückgeben wollte.

Da du eine direkte Ajax-Abfrage auf die PHP-Datei abschickst, erhältst du auch die komplette Ausgabe der Datei. Dazu gehören print's, echo's, var_dumps etc. Bei einer Schnittstelle, wo du deine Datei in gewissen Abschnitte anhand POST/PUT oder GET Parametern unterteilst, kannst du die Ausgabe der Datei dementsprechend - jenachdem - erzeugen.
 

Neue Beiträge

Zurück