Structure JSON ne fonctionne pas sous IE7 (JavaScript)
OK, je suis nouveau sur JSON, donc s'il vous plaît pardonnez-moi si ma question est un peu ignorants - j'ai battu ma tête contre le mur trop et besoin de quelques conseils d'experts.
Je vais essayer d'obtenir un simple exemple de travail où une page HTML utilise jQuery JSON/AJAX fonctions pour faire un appel à un exemple de page PHP qui passe d'une simple structure de données JSON et puis la page utilise jQuery pour écrire l'un des éléments de la structure de données à la page. Œuvres dans les FF. Ne fonctionne pas sous IE7 arrrggghhhh!
Code HTML (parties pertinentes):
<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script language="javascript" type="text/javascript">
function testAJAX() {
$.getJSON("test-ajax.php", function(json){
$("#div1").html(json.var1[1]);
});
}
</script>
</head>
<body>
<input type="button" value="test ajax" onclick="testAJAX();" />
<div id="div1"> </div>
</body>
Code PHP (test-ajax.php):
<?php
include_once('./json.php');
$output = array('var1' => array('value1a', 'value1b', 'value1c'),
'var2' => array('value2a', 'value2b', 'value2c'));
header("Content-type: text/plain");
echo json_encode($output);
?>
json.php a la json_encode() fonction que j'utilise - je l'ai eu à partir de http://us2.php.net/manual/en/function.json-encode.php. Je l'utilise parce que je n'ai pas de PHP5 et mon sys admins ne sont pas installer n'importe quel support pour elle. L'affichage de test-ajax.php directement dans votre navigateur affiche un JSON sérialisé structure comme ceci:
{"var1":["value1a","value1b","value1c"],"var2":["value2a","value2b","value2c"]}
qui semble être un JSON valide structure. Dans mon JavaScript je suis en train de référence 'value1b'
en faisant ceci: json.var1[1]
. FF gère cela très bien. IE7 dit que c'est pas défini.
Ce que je fais mal? Comment dois-je prendre le transfert d'un tableau 2d comme ce
array('var1' => array('value1a', 'value1b', 'value1c'),
'var2' => array('value2a', 'value2b', 'value2c'));
sur JSON/AJAX? Ou n'est-ce pas possible?
- Il faut absolument être possible. Je viens de tester cette chaîne JSON dans IE7 et il a bien fonctionné, j'ai pu réussir à trouver la valeur de json.var1[1]. Le problème doit être ailleurs, vous pouvez poster votre getJSON fonction?
- getJSON est à partir de la bibliothèque jQuery.
- hé oui, ma faute - était cacher le problème - voir ma réponse. merci!
Vous devez vous connecter pour publier un commentaire.
OK, compris. N'était pas un JSON/JavaScript question, mais d'une la mise en cache question. Quand j'étais en développement ce que je doit avoir d'abord testé IE7 lorsque test-ajax.php n'étais pas de travail ou été la production d'une autre structure JSON et puis j'ai changé test-ajax.php de ce que j'ai posté ci-dessus et j'ai mis à jour mon code JavaScript, MAIS IE7 a l'aide d'une version mise en cache de ce qu'il a d'abord reçu de test-ajax.php. Et j'ai testé ce - si j'ai vider le cache dans IE7 ça fonctionne et puis si je change les valeurs dans la structure JSON (mais pas la structure elle-même) IE7 continue à utiliser la mise en cache structure JSON.
Solution:
J'ai ajouté
dans mon test-ajax.php page et maintenant, IE7 est en train de vérifier le serveur correctement pour une version plus récente de test-ajax.php quand il fait un appel AJAX.
Merci à tous!
Essayez d'ajouter la ligne suivante à la fin de la test-ajax.php fichier:
Je ne voient pas immédiatement quelque chose de mal, mais voici quelques choses à essayer
(Probablement souhaitez exécuter ces alertes 1 seul à la fois)
Les deux problèmes communs avec IE et ajax sont les suivantes :
J'ai eu le même problème avec IE 8. La solution était tout simplement de désactiver la mise en cache avec ajaxSetup
Très gênant car cela fonctionne très bien dans les FF et Chrome.
Dans IE, vous devez inclure l'json2.js la bibliothèque que IE n'a pas de JSON native de l'analyse. Mais Firefox & Chrome a.
Vous obtenez les mêmes résultats si vous essayez d'accéder à la valeur de ce genre?
... au lieu de cela:
J'ai rencontré des problèmes lors de l'utilisation des mots réservés pour objet littéral propriétés. Il fonctionne très bien sous Firefox et Safari, mais les bombes dans IE. Voici celui qui habituellement, les voyages de moi:
C'est ce que je voudrais vérifier pour les premières. YMMV.