it-swarm.com.de

SyntaxError: JSON.parse: unerwartetes Zeichen in Zeile 1 Spalte 1 der JSON-Daten

Ich habe über 6 Stunden gebraucht, um eine Ausnahme oder ein Sonderzeichen in meinem Code zu finden, aber ich konnte es nicht. Ich habe alle ähnlichen Nachrichten hier eingesehen.

Ich versende das Formular mit einem großen Popup. Zuerst verwende ich ein Inline-Popup, um mein Formular zu öffnen, und sende alle Eingaben zur Überprüfung an main.js. 

Also brauche ich nur ein drittes Auge. 

Ich habe: index.html, register.php, main.js

Hier ist der Code

BILDEN

JS/AJAX

PHP-register.php

Hier geht die Fehlermeldung

JSON-Ausgabejson

Chrome-Konsole:

chrome

Firefox-Konsole:firefox


Was vermisse ich?

41
levent kaya

Die Tatsache, dass das Zeichen ein <lässt mich glauben, dass Sie einen PHP Fehler haben, haben Sie versucht, alle Fehler zu wiederholen.

Da ich Ihre Datenbank nicht habe, gehe ich Ihren Code durch und versuche, Fehler zu finden. Bisher habe ich Ihre JS-Datei aktualisiert

$("#register-form").submit(function (event) {

    var entrance = $(this).find('input[name="IsValid"]').val();
    var password = $(this).find('input[name="objPassword"]').val();
    var namesurname = $(this).find('input[name="objNameSurname"]').val();
    var email = $(this).find('input[name="objEmail"]').val();
    var gsm = $(this).find('input[name="objGsm"]').val();
    var adres = $(this).find('input[name="objAddress"]').val();
    var termsOk = $(this).find('input[name="objAcceptTerms"]').val();

    var formURL = $(this).attr("action");


    if (request) {
        request.abort(); // cancel if any process on pending
    }

    var postData = {
        "objAskGrant": entrance,
        "objPass": password,
        "objNameSurname": namesurname,
        "objEmail": email,
        "objGsm": parseInt(gsm),
        "objAdres": adres,
        "objTerms": termsOk
    };

    $.post(formURL,postData,function(data,status){
        console.log("Data: " + data + "\nStatus: " + status);
    });

    event.preventDefault();
});

PHP Edit:

 if (isset($_POST)) {

    $fValid = clear($_POST['objAskGrant']);
    $fTerms = clear($_POST['objTerms']);

    if ($fValid) {
        $fPass = clear($_POST['objPass']);
        $fNameSurname = clear($_POST['objNameSurname']);
        $fMail = clear($_POST['objEmail']);
        $fGsm = clear(int($_POST['objGsm']));
        $fAddress = clear($_POST['objAdres']);
        $UserIpAddress = "hidden";
        $UserCityLocation = "hidden";
        $UserCountry = "hidden";

        $DateTime = new DateTime();
        $result = $date->format('d-m-Y-H:i:s');
        $krr = explode('-', $result);
        $resultDateTime = implode("", $krr);

        $data = array('error' => 'Yükleme Sırasında Hata Oluştu');

        $kayit = "INSERT INTO tbl_Records(UserNameSurname, UserMail, UserGsm, UserAddress, DateAdded, UserIp, UserCityLocation, UserCountry, IsChecked, GivenPasscode) VALUES ('$fNameSurname', '$fMail', '$fGsm', '$fAddress', '$resultDateTime', '$UserIpAddress', '$UserCityLocation', '$UserCountry', '$fTerms', '$fPass')";
        $retval = mysql_query( $kayit, $conn ); // Update with you connection details
            if ($retval) {
                $data = array('success' => 'Register Completed', 'postData' => $_POST);
            }

        } // valid ends
    }echo json_encode($data);
20
James Lalor

Wenn Sie ein ähnliches Problem lösen möchten, erhalten Sie einen ähnlichen Fehler, wenn Ihre Eingabe eine leere Zeichenfolge ist.

z.B.

var d = "";
var json = JSON.parse(d);

oder wenn Sie AngularJS verwenden

var d = "";
var json = angular.fromJson(d);

In Chrome führte dies zu "Unrecept SyntaxError: Unerwartetes Ende der Eingabe", Firebug zeigte es jedoch als "JSON.parse: unerwartetes Datenende in Zeile 1 Spalte 1 der JSON-Daten" an.

Sicher, die meisten Leute werden davon nicht erfasst, aber ich hatte die Methode nicht geschützt und das hat zu diesem Fehler geführt.

22
HockeyJ

Löschen

 dataType: 'json'

ersetze es durch 

 dataType: 'text'

Ich habe genau das gleiche Problem und habe etwas gefunden. Ich habe die Zeile kommentiert: 

datentyp: 'Json',

danach war es erfolgreich, aber ... als ich console.log (data) erstellt habe, wurde die main index.html zurückgegeben.

Aus diesem Grund haben Sie den Fehler "Unerwartetes Token <" erhalten, das nicht analysiert werden kann. 

Ändern des Datentyps in Text half ___ Datentyp: 'Text'

Ich habe mich bei JSONlint erkundigt und mein Json-Format war korrekt. Trotzdem war es ein Fehler, wenn ich dataType: 'json' eingestellt habe.

JSON Data: {"eventinvite":1,"groupcount":8,"totalMessagesUnread":0,"unreadmessages":{"378":0,"379":0,"380":0,"385":0,"390":0,"393":0,"413":0,"418":0}} 
1
Amit Patekar

Senden von JSON-Daten mit NodeJS beim Aufruf von AJAX:

$.ajax({
    url: '/listClientsNames',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify({foo:'bar'})
}).done(function(response){
    console.log("response :: "+response[0].nom);
});

Achten Sie darauf, Leerzeichen zu entfernen.

app.post("/listClientsNames", function(req,res){

        var querySQL = "SELECT id, nom FROM clients";   
        var data = new Array();

        var execQuery = connection.query(querySQL, function(err, rows, fields){

            if(!err){
                for(var i=0; i<25; i++){
                    data.Push({"nom":rows[i].nom});         
                }
                res.contentType('application/json');
                res.json(data); 
            }else{  
                console.log("[SQL005] - Une erreur est survenue");
            }

        });

});
1

Ich habe den gleichen Fehler beim Abrufen von Daten aus der JSON-Datei siehe angehängten Link

"SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"

Also überprüfe ich den Pfad der JSON-Datei, die nicht korrekt ist,

const search = document.getElementById("search");
const matchList = document.getElementById("match-list");

//search json data and filter
const searchStates = async searchText => {
    const res = await fetch('../state.json');
    const states = await res.json();
    console.log(states);
}

search.addEventListener('input', () => searchStates(search.value));

damit ich den Pfad der Akte änderte

const res = await fetch('./state.json');

& es gibt mir Array als Ergebnis zurück. Überprüfen Sie also Ihren Pfad und versuchen Sie, ihn zu ändern. Es wird in meinem Fall funktionieren. Ich hoffe das klappt ..

1
akshay_sushir

Auch wenn Ihr JSON in Ordnung ist, könnte dies ein Problem mit dem DB-Zeichensatz (UTF8) sein. Wenn der Zeichensatz/die Sortierfolge Ihrer Datenbank UTF8 ist, PDO jedoch nicht ordnungsgemäß eingerichtet ist (Zeichensatz/Workaround fehlt), können einige/è/ò/ì/usw. in Ihrer Datenbank Ihre JSON-Codierung beschädigen. Überprüfen Sie Ihre Verbindungszeichenfolge. Sie sollte einer der folgenden ähneln:

$pdo = new PDO('mysql:Host=hostname;dbname=DBname;**charset=utf8**','username','password'); // PHP >= 5.3.6

$pdo = new PDO('mysql:Host=hostname;dbname=DBname','username','password',**array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")**); // older versions

P.S. Veraltet, aber dennoch hilfreich für Menschen, die mit "unerwartetem Charakter" verharren.

0
user7572039

Sind Sie sicher, dass Sie im Feld url keinen falschen Pfad verwenden? - Ich hatte den gleichen Fehler und das Problem wurde behoben, nachdem ich den Pfad überprüft, falsch gefunden und durch den richtigen ersetzt habe.

Stellen Sie sicher, dass die von Ihnen angegebene URL für die Anforderung AJAX korrekt ist und dass die Datei vorhanden ist.

0

Wenn das Ergebnis erfolgreich ist und Sie das Zeichen "<" erhalten, bedeutet dies, dass ein Fehler PHP zurückgegeben wird.

Wenn Sie alle Nachrichten anzeigen möchten, können Sie das Ergebnis als Erfolgsantwort erhalten, indem Sie Folgendes erhalten:

success: function(response){
     var out = "";
     for(var i = 0; i < response.length; i++) {
        out += response[i];
     }
     alert(out) ;
},
0
Sky Games Inc

In einigen Fällen wurden Daten nicht im JSON-Format codiert. Daher müssen Sie sie zuerst codieren, z

 json_encode($data);

Später werden Sie json Parse in Ihrer JS verwenden, z

JSON.parse(data);
0
qammar feroz

Möglicherweise ist seine Antwort irrelevant, aber es funktioniert in meinem Fall ... Ich weiß nicht, was auf meinem Server falsch war ... Ich aktiviere nur die Fehlerprotokollierung auf dem Ubuntu 16.04-Server.

//For PHP
error_reporting(E_ALL);
ini_set('display_errors', 1);
0
Prahlad