2010-05-23 6 views
0

J'ai un problème dans le code suivant:fonction Ajax échoue partiellement quand alerte retirée

//quesry the db for image information 
function queryDB (parameters) { 
    var parameters = "p="+parameters; 
    alert ("hello"); 


if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     // use the info 
    alert (xmlhttp.responseText); 
    } 
    } 

    xmlhttp.open("POST", "js/imagelist.php", true); 
    //Send the proper header information along with the request 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length", parameters.length); 
xmlhttp.setRequestHeader("Connection", "close"); 
xmlhttp.send(parameters); 
} 

qui est appel de cette fonction:

function buildGallery() { 

    var images = document.getElementsByTagName("img"); 
    for (var i = 0; i< images.length; i++) { 
     if (images[i].getAttribute("id").split("_")[0] == "onshow") { 

      var parameters = images[i].getAttribute("id").split("_")[1]; 

      queryDB (parameters); 
     } 
    } 

} 

Lorsque je supprime la déclaration d'alerte 4 lignes dans la fonction queryDB j'ai rencontré des problèmes. Cette fonction est appelée par une boucle, et sans l'alerte, je n'obtiens que des résultats pour la dernière valeur envoyée à cette fonction. Avec cela, j'obtiens tout ce que j'attendais et vraiment je ne sais pas pourquoi. J'ai entendu dire que cela pourrait être un problème de synchronisation car j'envoie de nouvelles demandes avant que l'ancien soit fini. J'ai aussi entendu parler du sondage, mais je ne trouve aucune information suffisamment détaillée. Je suis novice dans les services synchrones et je ne suis pas vraiment au courant des problèmes.

+0

Envoyé à quelle déclaration? Sans les alertes, le responseText est ignoré. Vous devez poster plus de votre code. Je pense que vous essayez peut-être de retourner la réponse Texte. –

+0

Désolé, je voulais dire que ça va mal quand je supprime la première alerte dans la fonction queryDB - juste en dessous des paramètres var. Ajout de la fonction appelant le code de problème. – YsoL8

+1

lorsque vous avez une alerte dans votre code, votre script obtient le temps de terminer, sinon le prochain appel annulera le précédent. –

Répondre

1

En fait, le problème est que vous utilisez une variable globale. Ajouter:

var xmlhttp; 

au début de queryDB

Comme le fait remarquer TRILLI, l'alerte se cache ce problème en donnant le temps d'appel avant de terminer avant de le remplacer.

+0

désolé quelle ligne est-ce? (Tout le xmlhttp me confondre) – YsoL8

+0

ooh je l'ai eu! Si seulement j'avais demandé plus tôt – YsoL8