SyntaxError: JSON.parse: onverwacht teken op regel 1 kolom 1 van de JSON-gegevens

Ik heb meer dan 6 uur besteed aan het vinden van een uitzondering of een speciaal teken in mijn code, maar ik kon het niet. Ik heb alle soortgelijke berichten hier gecontroleerd.

Ik stuur het formulier met een magnifieke pop-up. Eerst gebruik ik inline pop-up om mijn formulier te openen, dan stuur ik alle invoer naar main.js om te valideren.

Dus ik heb alleen een derde oog nodig.

Ik heb: index.html, register.php, main.js

Hier is de code

FORMULIER

JS/AJAX

PHP-register.php

Hier komen de foutmeldingen

JSON-uitvoer

Chrome-console:

Firefox-console:


Wat mis ik?


Antwoord 1, autoriteit 100%

Het feit dat het personage een < laat me denken dat je een PHP-fout hebt, heb je geprobeerd alle fouten te herhalen.

Omdat ik uw database niet heb, doorloop ik uw code om fouten te vinden. Tot nu toe heb ik uw JS-bestand bijgewerkt

$("#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 Bewerken:

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);

Antwoord 2, autoriteit 96%

In het voordeel van zoekers die een soortgelijk probleem willen oplossen, kunt u een soortgelijke foutmelding krijgen als uw invoer een lege tekenreeks is.

bijv.

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

of als u AngularJS gebruikt

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

In chrome resulteerde dit in ‘Uncaught SyntaxError: Unexpected end of input’, maar Firebug toonde het als ‘JSON.parse: onverwacht einde van gegevens op regel 1 kolom 1 van de JSON-gegevens’.

Natuurlijk zullen de meeste mensen hier niet door worden betrapt, maar ik had de methode niet beschermd en het resulteerde in deze fout.


Antwoord 3, autoriteit 78%

Verwijderen

dataType: 'json'

vervangen door

dataType: 'text'

Antwoord 4, autoriteit 26%

Ik heb exact hetzelfde probleem en ik heb iets gevonden.
Ik heb commentaar gegeven op de regel:

dataType : ‘json’,

na dat het een succes was, maar … toen ik dat deed console.log (data) terugkeerde de belangrijkste index.html.

Dat is de reden waarom u “Unexpected token & lt;” fout en het kan niet ontleden.


5, Autoriteit 7%

Het veranderen van de data type om tekst geholpen
dataType: ‘text’

Ik heb contact op met JSONlint en mijn JSON-indeling juist was. Toch was het foute aangooi toen ik dataType: 'json'

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}} 

6, Autoriteit 4%

Zelfs als uw JSON OK is, kan het DB CHARSET (UTF8) probleem zijn. Als uw DB’s CharsSet / Collation UTF8 is, maar PDO is niet correct ingesteld (Charset / Workaround Missing) Sommige à / È / ò / ì / enz. In uw DB kunnen uw JSON-codering breken (nog steeds gecodeerd, maar het veroorzaken van problemen met het gebruik van problemen). Controleer uw verbindingstekenreeks, het moet vergelijkbaar zijn met een van deze:

$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. Verouderd, maar toch kan nuttig zijn voor mensen die vastzitten met “onverwacht karakter”.


7, Autoriteit 4%

Ik heb dezelfde foutmelding tijdens fetch-gegevens van JSON-bestand Zie bijgevoegde link

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

Dus controleer ik het pad van het JSON-bestand dat niet correct is,

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));

Dus dat ik het pad van het bestand

heb gewijzigd

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

& amp; het geeft me als gevolg daarvan een array.
Dus controleer je pad & amp; probeer het veranderd. Het zal in mijn geval werken. Ik hoop dat dat werkt.


8, Autoriteit 4%

json.parse () herkent die gegevens niet als een tekenreeks. Bijvoorbeeld {objAskGrant:"Yes",objPass:"asdfasdf",objNameSurname:"asdfasdf adfasdf",objEmail:"[email protected]",objGsm:3241234123,objAdres:"asdfasdf",objTerms:"CheckIsValid"}

Dat is als volgt: JSON.parse({objAskGrant:"Yes",objPass:"asdfasdf",objNameSurname:"asdfasdf adfasdf",objEmail:"[email protected]",objGsm:3241234123,objAdres:"asdfasdf",objTerms:"CheckIsValid"});die syntaxEror uitoefende: ontbreekt “‘” in plaats van “{” online …

Wikkel dus alle gegevens zoals deze: '{"objAskGrant":"Yes","objPass":"asdfasdf","objNameSurname":"asdfasdf adfasdf","objEmail":"[email protected]","objGsm":3241234123,"objAdres":"asdfasdf","objTerms":"CheckIsValid"}'die perfect goed voor mij werkt.

en niet zoals deze: "{"objAskGrant":"Yes","objPass":"asdfasdf","objNameSurname":"asdfasdf adfasdf","objEmail":"[email protected]","objGsm":3241234123,"objAdres":"asdfasdf","objTerms":"CheckIsValid"}"die de huidige fout geeft die u ervaart.


9

Weet u zeker dat u geen verkeerd pad gebruikt in de url-veld? – Ik kreeg naar dezelfde fout, en het probleem werd opgelost nadat ik het pad had gecontroleerd, vond het verkeerd en verving het met de juiste.

Zorg ervoor dat de URL die u opgeeft correct is voor het AJAX-verzoek en dat het bestand bestaat.


10

Kan zijn irrelevant antwoord zijn, maar het werkt in mijn geval … weet niet wat er mis was op mijn server … ik maak gewoon een foutlogboek op Ubuntu 16.04-server.

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

Antwoord 11

Als het resultaat succes is, maar je krijgt de “<” teken, betekent dit dat er een PHP-fout wordt geretourneerd.

Als u alle berichten wilt zien, kunt u het resultaat als een succesreactie krijgen door het volgende te krijgen:

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

Antwoord 12

In sommige gevallen zijn gegevens niet gecodeerd in JSON-indeling, dus u moet deze eerst coderen, bijvoorbeeld

json_encode($data);

Later gebruik je json Parse in je JS, zoals

JSON.parse(data);

Antwoord 13

Probeer MYSQLI_ASSOCte gebruiken in plaats van MYSQL_ASSOC… meestal is het probleem opgelost door dat te veranderen

Veel succes!

Other episodes