SyntaxError: JSON.parse: caractère inattendu à la ligne 1 colonne 1 des données JSON

j'ai passé plus de 6 heures à trouver une exception ou un caractère spécial à trouver dans mon code mais je n'ai pas pu. J'ai vérifié tous les messages similaires ici.

j'envoie le formulaire avec popup magnifique. Tout d'abord, j'utilise popup inline pour ouvrir mon formulaire que j'envoie toutes les entrées à main.JS à valider.

alors, j'ai juste besoin d'un troisième oeil.

j'ai: index.html,register.php,main.js

Voici le code

FORM

JS / AJAX

PHP-register.php

Voici les messages d'erreur

sortie JSON json

Console Chrome:

chrome

console Firefox : firefox


Ce qui me manque?

39
demandé sur Omar 2014-09-09 15:54:04

11 réponses

le fait que le caractère est un < me faire penser que vous avez une erreur PHP, avez-vous essayé de faire écho à toutes les erreurs.

comme je n'ai pas votre base de données, je suis en train de parcourir votre code en essayant de trouver des erreurs, jusqu'à présent, j'ai mis à jour votre fichier JS

$("#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);
18
répondu James Lalor 2014-09-09 13:55:45

Pour le bénéfice des chercheurs qui cherchent à résoudre un problème similaire, vous pouvez obtenir une erreur similaire si votre entrée est une chaîne vide.

par exemple

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

ou si vous êtes en utilisant AngularJS

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

dans chrome, il en est résulté "Uncaught SyntaxError: Unexpected end of input", mais Firebug l'a montré comme " JSON.parse: fin inattendue des données à la ligne 1 colonne 1 des données JSON".

bien sûr, la plupart des gens ne seront pas pris par ceci, mais je n'avais pas protégé la méthode et il a entraîné cette erreur.

21
répondu HockeyJ 2015-01-22 09:26:57

Supprimer

 dataType: 'json'

remplacer par

 dataType: 'text'
10
répondu Алексей Полоскин 2016-03-09 20:46:31

j'ai exactement le même problème, et j'ai trouvé quelque chose. J'ai commenté la ligne :

type de données: 'json',

après cela il a réussi mais... quand j'ai fait la console.log (data) il renvoie l'index principal.HTML.

C'est pourquoi vous avez une erreur "inattendu token <" et il ne peut pas se Parser.

6
répondu Dumitrascu Alexandru 2014-12-26 15:51:25

Changer le type de données texte aidé dataType: 'texte'

j'ai vérifié avec JSONlint et mon format json était correct. C'était quand même une erreur de lancer quand j'ai mis 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}} 
1
répondu Amit Patekar 2016-07-30 09:30:04

envoi de données JSON avec NodeJS sur L'appel AJAX :

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

soyez conscient d'enlever les espaces blancs.

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
répondu Mickael Largement 2016-09-14 11:31:45

Etes-vous sûr que vous n'utilisez pas un mauvais chemin dans le url champ? - Je faisais face à la même erreur, et le problème a été résolu après que j'ai vérifié le chemin, l'ai trouvé faux et l'ai remplacé par le bon.

assurez-vous que l'URL que vous spécifiez est correcte pour la requête AJAX et que le fichier existe.

0
répondu Nick Louloudakis 2016-07-21 13:37:05

même si votre JSON est ok, il pourrait être DB charset (UTF8) problème. Si le charset/collation de votre DB est UTF8 mais que PDO n'est pas configuré correctement (charset/solution manquante) certains à / è / ò / ì / etc. dans votre DB pourrait casser votre encodage JSON (encore encodé mais provoquant des problèmes d'analyse). Vérifiez votre chaîne de connexion, elle doit être similaire à l'une de celles-ci:

$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. obsolète mais pourrait quand même être utile pour les gens qui sont coincés avec "caractère inattendu".

0
répondu user7572039 2017-02-16 02:02:58

est peut-être sa réponse sans importance, mais elle fonctionne dans mon cas...ne sais pas ce qui n'allait pas sur mon serveur...J'ai juste activé la journalisation des erreurs sur le serveur Ubuntu 16.04.

//For PHP
error_reporting(E_ALL);
ini_set('display_errors', 1);
0
répondu Prahlad 2017-09-25 14:27:25

lorsque le résultat est un succès mais que vous obtenez le caractère"<", cela signifie qu'une erreur PHP est retournée.

si vous voulez voir tous les messages, Vous pouvez obtenir le résultat comme une réponse de succès en obtenant par ce qui suit:

success: function(response){
     var out = "";
     for(var i = 0; i < response.length; i++) {
        out += response[i];
     }
     alert(out) ;
},
0
répondu Sky Games Inc 2018-01-12 00:17:07

dans certains cas, les données n'étaient pas encodées au format JSON, donc vous devez les encoder d'abord E. g

 json_encode($data);

plus tard, vous utiliserez JSON Parse dans votre JS, comme

JSON.parse(data);
0
répondu qammar feroz 2018-06-05 10:35:06