AJAX json inattendue du jeton"
J'ai ce code:
$.ajax({
dataType: 'text',
url: '/_/js/answers.json',
type: "GET",
success: function (data) {
alert(data);
alert(data.code);
var result = JSON.parse(data);
var hey = JSON.parse('{"code": 123}');
alert(hey.code);
alert(result.code);
},
error: function () {
alert("code not found");
}
});
Dans la première alerte, alert(data)
il me montre '{"code": 123}", dans le second alerte alert(data.code)
, il me dit undefined
, dans la troisième alerte alert(hey.code)
, il me montre 123
, et c'est ce que je veux, mais dans le quatrième alerte, la console me dit Uncaught SyntaxError: Unexpected token '
.
Lorsque je change la JSON.parse
à $.parseJSON
, il fait exactement les mêmes choses.
Je ne sais pas quel est le problème, le json est fine (exactement le même que le json dans le var hé).
J'ai passé le json pour le serveur comme ceci:
javascript:
var json = {code: code};
json = JSON.stringify(json);
json = {data: json};
$.ajax({
url: "/_/js/write-json.php",
type: "POST",
dataType: 'json',
data: json
});
php:
<?php
$myFile = "answers.json";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh,var_export($_POST['data'], true));
fclose($fh);
?>
Merci, bhc11.
- Il se peut que vos JSON n'est pas valide, pour être sûr de vérifier ici
- J'ai vérifié, c'est exactement le même que le json dans le var hey.
- Merci de poster au format json.
- Le JSON contient singlequote caractères au début et à la fin, comme vous l'a montré? Qui n'est pas valide.
- vous dites que votre alerte des états de données
'{"code": 123}'
. Cela inclut les guillemets simples qui ne sont pas destinés à être là. C'est votre problème. - l'ofc valides. Ses une chaîne de caractères qui est analysé!
- Les guillemets simples sont une partie de Javascript syntaxe littérale, ils ne font pas partie de l'JSON lui-même.
- droit, mais l'échantillon utilisé dans la question correctement à l'aide de citations.
- alerte
result.code
ne devrait pas vous donner qu'une erreur de syntaxe. l'erreur provient de quelque chose d'autre. - Vous pouvez utiliser JSON.stringify () ou la fonction eval(données) avant de l'utiliser.
- qui était-il, je l'ai changé pour
data = $.parseJSON(data.substr(1, (data.length-2)))
, et cela a fonctionné. Merci - Je pense que vous devriez corriger le code côté serveur pour le retour JSON valide au lieu de prendre une sous-chaîne de la suite quand yur l'analyser. Juste par intérêt, aucune raison pourquoi vous n'êtes pas à l'aide de
dataType: 'json'
et simplement d'obtenir un objet que l'data
param? - bhc11 - s'il vous Plaît faire comme @Adam a suggéré. Mieux d'avoir des données correctes pour commencer que d'essayer de les corriger plus tard.
- Je l'ai fait, mais il m'a donné la fonction d'erreur. J'ai édité la question afin de montrer comment j'ai inséré le json. Peut-être que ce n'est pas de la bonne façon.
Vous devez vous connecter pour publier un commentaire.
La
'
personnages autour de votre JSON en faire un JavaScript chaîne et ne font pas partie des données.Il semble que vous avez ces caractères dans le JSON que vous demandez sur HTTP, donc ils ne font partie des données.
Ce n'est pas JSON valide. Supprimer les guillemets.
Vous devriez avoir:
Pas
Essayez de changer le type de données en JSON:
var result = JSON.parse(data);
depuisdata
est déjà un objet. Cependant, il apparaît d'après les autres commentaires, que le retour de l'JSONw comme non valide. Cette méthode nécessite JSON valide à partir du serveur (et un JSON valide type de contenu)