2010-08-27 8 views
1

Je crée un objet JSON de façon dynamique et lorsque je l'envoie via un POST ajax, j'obtiens des caractères clés non autorisés comme réponse. Je sais que mon objet est correct car je peux créer l'objet SAME EXACT manuellement et ça envoie bien. J'ai essayé escape() sur toutes mes chaînes avant de les ajouter à l'obj, mais cela n'a pas fonctionné non plus.Caractères clés non autorisés réponse ajax

Ai-je raté quelque chose?

Ceci est mon poste

$.ajax({ 
    type: 'POST', 

    url: 'http://localhost/test', 
    data: obj, 
    dataType : 'JSON', 
    success: function(){ 
     console.log('nice'); 
    } 
}); 

J'utilise le même obj que dans ce poste

Add to JSON without knowing its structure

+0

Vérifiez le codage de la page – BrunoLM

+1

Veuillez fournir un exemple et quel analyseur vous utilisez. – Zepplock

+0

Exemple de l'appel et obj sont ajoutés. ma page n'a aucun codage b/c il est envoyé à un script php. – Mike

Répondre

0

Il s'avère que cette erreur a été provoquée par la bibliothèque d'entrée de CI. Sur la ligne 215, vous trouverez la fonction _clean_input_keys qui utilise preg_match() pour interdire certains caractères dans vos clés. Ainsi, lorsque vous envoyez JSON et que php le reçoit en tant que tableau, il peut générer une erreur.

Pour résoudre ce problème, vous pouvez étendre la bibliothèque ou modifier le cœur CI.

+0

Étendre à quoi? Quelle était votre solution? – HGPB

2

page Votre encodage est probablement pas correspondant, cela signifie que la réponse peut venir avec quelques caractères non valides, par exemple:

ÿ¬{"Result":"A"} 

Vous devez vous assurer que l'encodage que vous envoyez correspond à l'encodage de l'autre côté.

+0

J'ai juste essayé de publier le JSON sur la même page que celle à laquelle il est envoyé avec maintenant de la chance, donc je ne pense pas que ce soit le problème. – Mike

+0

Je viens de me rendre compte que mes Clés ont des espaces en eux ... Y a-t-il un moyen de contourner celui-là? – Mike

+0

Avez-vous enregistré votre fichier sous UTF-8? J'ai eu un problème comme ça une fois, essayez d'enregistrer avec ANSI. Si ça ne marche toujours pas, je suppose que c'est autre chose. – BrunoLM

2

Je viens de réaliser que mes clés ont des espaces dans les

Ouais ... le site que vous connectez est probablement en cours d'exécution CodeIgniter.

CI a une fonctionnalité de «nettoyage» d'entrée brisée qui refuse délibérément tous les paramètres de forme avec des espaces (ou autre chose que les caractères alphanumériques et .-/:).

+0

vous l'avez deviné, est-il un moyen de résoudre ce problème. J'ai accès au site auquel je me connecte ... – Mike

+0

Non sans avoir piraté '_clean_input_keys' dans' libraries/Input.php' de CodeIgniter. L'ensemble de '_clean_input_data' est vraiment discutable; l'anti-XSS est totalement faux, si activé (heureusement non) et il ne nettoie pas les choses que vous pourriez réellement vouloir, comme les codes de contrôle ou les séquences non-UTF-8. – bobince

Questions connexes