Dans la fonction xmlhttp.onreadystatechange, comment puis-je transmettre le nom de l'ID que je souhaite modifier?

StackOverflow https://stackoverflow.com/questions/1425358

  •  07-07-2019
  •  | 
  •  

Question

Voici mon code. Voir la ligne qui est commentée. Lorsque l'élément id (qui est une étendue) est codé en dur, cela fonctionne. Lorsque l'id est créé en concaténant les variables transmises dans stateChanged, cela ne fonctionne pas. Ne suis-je pas autorisé à transmettre des variables à stateChanged? Quel est le problème?

function multiplePassportPoints(id, counter)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="addmorepoints.php"; 
url=url+"?id="+id+"&c="+counter;
url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged(id,counter);
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged(id, counter) 
{
  if (xmlhttp.readyState==4)
  {
    //THIS WORKS (assuming id is 99 and counter is 5:
    //document.getElementById("99_5").innerHTML += xmlhttp.responseText; 

    //BUT I NEED IT TO WORK LIKE THIS:
    document.getElementById(studentID+"_"+counter).innerHTML += xmlhttp.responseText; 
  }
}

Merci!

Était-ce utile?

La solution

Vous pouvez changer le code en

xmlhttp.onreadystatechange = function () {
        stateChanged(id,counter);
    };    

Autres conseils

 <script type="text/javascript">
 var i=1;
 function validate(str)
 { 
 xmlHttp=GetXmlHttpObject()
 var url="checkvalidate.php"
 url=url+"?User9="+str
 xmlHttp.onreadystatechange=stateChanged19 
 xmlHttp.open("GET",url,true)
 xmlHttp.send(null)
 }
function stateChanged19() 
 {  

 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  { 

  document.getElementById("valid"+i)
  .innerHTML=xmlHttp.responseText 
  i=i+1;
   } }
 </script>

Une meilleure méthode pouvant être appelée plusieurs fois avant la fin de l'appel précédent. Notez que si vous appelez multiplePassportPoints deux fois, votre valeur précédente de xmlhttp sera remplacée. Il y a deux résultats:
1- tout fonctionne bien quand il n'y a pas de concurrence (possibilité très élevée),
2- le premier appel ne se produit jamais (possibilité très faible mais cela se produira de temps en temps et sera très difficile à repérer et à reproduire)

Mais le code suivant utilise une variable locale et pourrait (non testé) être sûr d'appeler encore et encore.

function multiplePassportPoints(id, counter) {
  var xmlhttp=GetXmlHttpObject();
  if (xmlhttp==null)
  {
    alert ("Browser does not support HTTP Request");
    return;
  }

  var url="addmorepoints.php"; 
  url=url+"?id="+id+"&c="+counter;
  url=url+"&sid="+Math.random();

  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4) {
      stateChanged(id, data, xmlhttp.responseText);
    }
  };

  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
}

function stateChanged(id, counter,text) 
{
    document.getElementById(id+"_"+counter).innerHTML += text; 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top