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
Voici les messages d'erreur
sortie JSON
Console Chrome:
console Firefox :
Ce qui me manque?
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);
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.
Supprimer
dataType: 'json'
remplacer par
dataType: 'text'
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.
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}}
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");
}
});
});
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.
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".
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);
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) ;
},
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);