Wtf IE7 – Les appels AJAX utilisant setTimeout

J'ai testé ceci sur Firefox, Opera et Seamonkey. Ça marche bien. Quand il s'agit d'Internet Explorer 7. Cela fonctionne, mais jusqu'à un certain point. Je fais un appel AJAX à un script PHP toutes les quelques secondes. Dans IE7, il fait le premier appel AJAX et récupère les données, mais il ne le fait plus jamais. Même si j'ai une fonction setTimeout dans le bloc else. POURQUOI? 🙁

startTime = setTimeout('getStatus()', 5000); }//function convertNow 

Function getStatus () {

  $.ajax({ type: "GET", url: "fileReader.php", data: 'textFile=' + fileNameTxt, success: function(respomse){ textFileResponse = respomse.split(" "); $("#done").html("Downloading & Converting Video...<b style='font-size:17px;color:green;'>" + textFileResponse[0] + "</b><br /><b>" + properFileName + '</b>'); } });//ajax if(textFileResponse[0]=='100.0%'){ } else{ continueTime = setTimeout('getStatus();', 3000); alert('call end'); } 

}

Excusez-moi si une frustration vient de cette question. J'ai couru comme un poulet sans tête pendant les 3 dernières heures.

Merci de votre aide.

EDIT 2

J'ai ajouté la fonction complète. Le setTimeout semble fonctionner correctement. Ce doit être l'appel AJAX, je suis en train de vérifier ce qui est retourné. Encore étranger! Il continue de retourner la même valeur à partir de la demande AJAX et ne reçoit pas de nouvelles valeurs !! Je pense que la réponse 2 pourrait avoir quelque chose. Cela peut être dû avec le cache, mais comment allez-vous venir?

Demandez-vous l'appel ajax via HTTP GET par opposition à HTTP POST? IE a tendance à utiliser les résultats mis en cache des appels ajax sauf si vous utilisez POST au lieu de GET.

EDIT: Depuis que vous avez mis à jour votre question, je peux voir que vous utilisez effectivement le verbe GET. Changez-le sur POST et je parie que votre problème sera résolu.

Vous pouvez toujours utiliser la requête GET et ajouter simplement

 cache: false 

À la demande $ .ajax.

Pas du tout sûr de cela, mais vous manquez ; ?

de:

 setTimeout('getStatus()', 3000); 

à:

 setTimeout('getStatus();', 3000); 

J'ai remarqué que textFileResponse est défini dans la déclaration de fonction du gestionnaire de réussite pour l'appel AJAX encore référencé comme un tableau immédiatement après avoir effectué l'appel AJAX. Peut-être que dans IE 7, le gestionnaire de succès n'a pas terminé avant la référence du tableau qui jetterait une erreur de script java, donc setTimeout ne fonctionnerait jamais.