2010-12-04 6 views
0

Je suis nouveau à AJAXtraitement multiples requêtes AJAX

Le problème que je suis confronté est que j'ai une requête de base de données qui prend 2 minutes pour exécuter ... alors qu'il exécution je veux que l'utilisateur d'obtenir une mise à jour de ce qui est passe toutes les 30 secondes, le nombre de commandes traitées à partir de la base de données. Avant de lancer la requête de traitement des commandes, j'imprime l'ordre staus ... fonctionne bien ... alors je lance la requête de traitement des commandes et entre si j'appuie sur le bouton de mise à jour .. il attend le traitement de la commande pour terminer puis me donne la mise à jour ... voici le code que j'ai

<html> 
<head> 
<script type="text/javascript"> 


function getupdate() 
{ 
v=document.getElementById('test').value; 

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() 
    {alert(v); 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 

    document.getElementById("update").innerHTML=v; 
    //document.getElementById("chunks").innerHTML=xmlhttp.responseText; 

    } 
    } 

xmlhttp.open("POST","querygoogle.php",true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
xmlhttp.send("process=9"); 
} 


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

    } 
    } 
xmlhttp1.open("POST","querygoogle1.php",true); 
xmlhttp1.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
xmlhttp1.send("process=0"); 
//xmlhttp.send(); 
} 
</script> 
</head> 
<body > 
<span id="txtHint"></span><input name="test" type="text" id="test" onchange="getupdate();" value="3"/> 
<p>Status: </p> 
<div id="chunks" > 
    <p>Being Submitted for Analysis</p> 
    <p> 
    <input name="search" type="button" value="search" onclick="chunks();"> 
    </p> 
</div> 
<p>Update: </p> 
<div id="update" ></div> 

</body> 
</html> 

peut quelqu'un pls aider. Merci

+0

Si vos requêtes de base de données prennent 2 minutes, essayez de les optimiser (par exemple en utilisant des index). – ThiefMaster

Répondre

1

Semble que votre problème est côté serveur plutôt que côté client. Si je vous comprends bien, vous voulez que le flux soit:

  1. Le client envoie une requête pour une requête de base de données.
  2. Mise à jour des demandes client.
  3. La mise à jour est reçue.
  4. Mise à jour des demandes client.
  5. La mise à jour est reçue. (répéter jusqu'à ...)
  6. Le résultat de la requête est reçu.

Les actions que vous faites onreadystatechange sont asynchrones, de sorte que l'interface client est juste assis autour d'attente pour l'appel ajax revenir du serveur - et si cela ne se produit jusqu'à ce que le traitement est fait, cela signifie que vos demandes stagnent sur le serveur. Etes-vous sûr que le côté serveur de la mise à jour de la demande revient rapidement avec le statut, ou est-ce une chance qu'il soit bloqué jusqu'à la fin du traitement?

0

Oui, il semble que c'est un problème côté serveur. Il semble que le serveur ne puisse pas traiter votre demande de mise à jour car elle exécute la requête DB.