JSON Parse Error: unexpected end of data at line 1 column 1 of the JSON data
Ich habe eine Datenbank, analysis.php und index.php Webseiten. Die analysis.php ruft die Daten aus der Datenbank und sortiert Sie in einer vorgeschriebenen Muster, und dann hallt der json_encode($array);
in eine div
mit der id "Daten". Ich bin versucht zu bekommen, dass die JSON-Daten und analysieren Sie diese in der index.php Seite.
Aber ich erhalte eine Fehlermeldung. SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
Ich versuche, diese Daten jedesmal, wenn der Benutzer wählt eine option aus einem select-Feld.
Mein jQuery-code ist:
$(document.body).on('change', '.select' , function () {
var identification = $(this).val();
var JSONText = $(this).closest('div[id|="module"]').find('p[id="JSON"]');
JSONText.load('analysis.php?data=' + identification + ' #data');
console.log("JSON Imported: '" + identification + "'");
var obj = jQuery.parseJSON(JSONText.text());
console.log(JSONText.text());
});
EDIT: Wie Sie sehen können, habe ich das snippet console.log(JSON.text());
. Die Ausgabe der JSON, das ich bekomme, richtig ist. Das einzige Problem, das ich denken könnte ist, dass die Zitate sind alle "
anstelle des JSON Anführungszeichen, die sich von den äußeren Anführungszeichen.
JSON
wie die Browser die nativen json-parser zugewiesen. Nur sehen diese, wtf machst du da ? jQuery.getJSON.Überprüfen Sie die Konsole für die XHR-von
analysis.php
. Die JSON-Antwort ist unvollständig, mit zu beginnen.Die JSON-Antwort scheint gültig. Ich habe überprüft deren Gültigkeit auf jsonlint.com.
beim Aufruf
jQuery.load
Sie starten den Download der JSON vom server, aber der andere code ausgeführt wird, direkt danach, also bevor der download abgeschlossen ist, daher die Bezeichnung "asynchron". So müssen Sie den kompletten Rückruf, um sicherzugehen, dass Ihre Daten tatsächlich geladen.Nein, die "laden Sie als html -, insert into dom, abrufen
text
ist gefährlich". Ich habe ein Beispiel zur Verdeutlichung die korrekte Verwendung.InformationsquelleAutor shadoweye14 | 2015-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
jQuery.laden asynchron ist, du versuchst zu Parsen von JSON, bevor Sie tatsächlich geladen werden. Mit jQuery.getJSON lädt den Inhalt, macht die Analyse und stellt einen Rückruf Sie können für die Bindung.
jQuery.load lädt den Inhalt als HTML und setzt das innerHTML des ausgewählten Elements, konnte Sie binden die
complete
handler hier gut, aber Sie können Probleme auftreten, laden Sie den Inhalt als HTML und dann mittext
, um es aus dem DOM-wie einige Teile der JSON kann interpretiert werden als HTML-Elemente.Besser zu nutzen diese:
console.log(data);
nicht Feuer überhaupt. Es gibt keine Anzeichen dafür, dass die getJSON-Funktion macht etwas.Sind Sie tatsächlich zu laden plain JSON ? Oder hat die Ausgabe von
analysis.php
enthalten, die nicht json-Ausgabe ? Wenn ja, könnten Sie ersetzengetJSON
mitload
und verwendenconsole.log($.parseJSON(data))
aber es wäre besser(sauberer) zu habenanalysis.php
Ausgabe unformatierter JSON-vielleicht ist die Einführung eines weiteren Parameters, wieajax=true
.Die Seite enthält HTML-Elements, wie definiert in meine Frage oben. Ich will schnappen Sie sich den text aus einem div mit einer bestimmten ID.
InformationsquelleAutor LJᛃ
Neben LJ_1102 Lösung, hier ist ein Weg, um das aktuelle snippet:
Dies ist sehr fehleranfällig, sobald die json enthält alle html-Zeichen werden nicht korrekt mit jquerys
text
Methode. Auch er öffnet alle Tore für die XSS - Angriffe.InformationsquelleAutor Alex