2013-07-12 8 views
0

Here is a demo En bref bref: Si quelqu'un clique sur le changement de texte next() la fonction sera déclenchée.Javascript dysfonctionnement dans Internet Explorer

next() La fonction envoie les données relatives à ajax_next_track.php et récupère une donnée aléatoire.

Puis il remplace les textes en artist_name et track_name avec les données aléatoires.

Tout cela fonctionne très bien dans Firefox et Chrome. Cependant, il ne le fait pas dans Internet Explorer. Si vous cliquez sur modifier le texte plus de deux fois avec différents navigateurs, vous pouvez voir le problème. Dans les autres navigateurs, il y aura une heure de fonctionnement avec le texte 'loading ...' à l'écran; mais cela arrive immédiatement, sans temps de fonctionnement dans Internet Explorer.

La fonction next() ne peut pas envoyer les données au fichier ajax.

Alors, comment puis-je le réparer?

Merci d'avance.

function next(tags) 
    { 
     var hr = new XMLHttpRequest(); 
     var url = 'ajax_next_track.php?tags=' + tags; 
     hr.open("GET", url, true); 
     hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     hr.onreadystatechange = function() 
     { 
      if(hr.readyState == 4 && hr.status == 200) 
      { 
       var return_data = hr.responseText; 
       jsonObj = JSON.parse(return_data); 
       document.getElementById("artist_name").innerHTML = jsonObj.artist_name; 
       document.getElementById("track_name").innerHTML = jsonObj.track_name; 
       document.getElementById("name").title = 'play '+jsonObj.artist_name+' - '+jsonObj.track_name+' radio'; 

      else 
      { 

      } 
     } 

     document.getElementById("track_name").innerHTML = 'loading...'; 
     document.getElementById("artist_name").innerHTML = ''; 
     hr.send(null); 
} 

<div id="player"> 
    <div id="playPauseOutDiv" onclick="pause();"> 

    </div> 
     <div id="artist_track"> 
      <span id="artist_name">gerry rafferty</span> 
      <span id="track_name">baker street</span> 
     </div> 
    </a> 

    <div id="ikinciSatir"> 
     <a id="changeSong" title="Shuffle" href="javascript:void(0);" onclick="next('3871');">Change</a> 
    </div> 
</div> 
+1

Que voulez-vous dire par "impossible d'envoyer les données à un fichier ajax"? Voulez-vous dire 'next' ne s'appelle pas? Ou il s'appelle et il y a une erreur? Si le premier, nous devons voir comment il est invoqué. Si ce dernier, nous avons besoin de voir l'erreur. –

+0

@PaulTomblin J'ai supprimer et réparer la pièce avec le nom d'identification. Mais le problème principal est toujours là; et j'ai ajouté le HTML. – Tahtakafa

Répondre

4

J'ai rencontré le même problème il y a seulement 2 jours. J'utilisais IE8, et l'appel ajax suivant n'était pas vraiment fait mais IE8 essaye d'utiliser le cache à la place.

Je trouve cette page de documentation ajax

Par défaut, les demandes sont toujours émis, mais le navigateur peut servir des résultats de son cache. Pour interdire l'utilisation des résultats mis en cache, définissez cache sur false. Pour que la demande signale un échec si l'actif n'a pas été modifié depuis la dernière requête, définissez ifModified sur true.

Essayez si ça aide. Voici la documentation http://api.jquery.com/jQuery.ajax/

2

L'erreur dans le débogueur IE dit line 40 document.getElementById("name") is null or not an object. Je vois des portées nommées "ARTIST_NAME" et "TRACK_NAME" dans votre code html, mais pas de "nom".

+0

J'ai supprimé et corrigé la pièce dont l'identifiant est nom; mais le problème principal est toujours là. – Tahtakafa

+0

Je l'ai réessayé, et ça marche bien, sauf que votre fonction ajax retourne le même album à chaque fois. Ce problème concerne le serveur, pas le code que vous avez publié. –

+0

Il est impossible de retourner la même piste à chaque essai. Parce qu'il y a des milliers de pistes.Si vous l'essayez avec d'autres navigateurs, vous verrez le problème. Également dans d'autres navigateurs, il y aura une heure de fonctionnement avec le chargement ... du texte à l'écran; mais cela arrive immédiatement, sans temps de fonctionnement dans Internet Explorer. – Tahtakafa

3

Pour une raison quelconque, IE met en cache le fichier JSON et obtient 304 réponses non modifiées au lieu de 200 OK chaque fois après le 1er.

La solution de contournement la plus simple pour cela qui n'a pas besoin de modifier les paramètres côté serveur consiste à ajouter un paramètre aléatoire à l'URL demandée à chaque requête, par exemple.

var url = 'ajax_next_track.php?tags=' + tags + '&nocache=' + Math.random(); 
+0

La «raison» pour laquelle IE met en cache la réponse est que c'est ce que le standard HTTP (RFC 2616) dit faire. – EricLaw

+0

@EricLaw, merci pour la clarification. Mais quelle est la raison pour laquelle les autres navigateurs obtiennent une réponse OK? J'ai essayé de trouver la différence entre les en-têtes HTTP affichés par Firebug et IE Dev. Outils, respectivement, mais ne l'ont pas remarqué ... –

+0

Dans certains cas, d'autres navigateurs ne traitent pas la mise en cache XHR selon les normes. Sans le repro exact (en particulier les en-têtes de réponse), je ne peux pas dire avec certitude ce que vous voyez. – EricLaw

Questions connexes