2009-09-15 4 views
3

Voici mon code. Voir la ligne qui est commentée. Lorsque l'identifiant de l'élément (qui est un span) est codé en dur, cela fonctionne. Lorsque l'identifiant est créé en concaténant les variables passées dans stateChanged, cela ne fonctionne pas. Ne suis-je pas autorisé à transmettre des variables à stateChanged? Qu'est-ce qui ne va pas?Dans la fonction xmlhttp.onreadystatechange, comment transmettre le nom de l'ID que je veux modifier?

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!

Répondre

8

Vous pouvez modifier le code à ce

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

rocher! Ça marche! Merci. – Jen

+6

+1. Mais j'aurais aimé que vous expliquiez que 'xmlhttp.onreadystatechange = stateChanged (id, counter);' invoquait en fait 'stateChanged (id, counter)' et assignait la valeur de retour à 'onreadystatechange' plutôt que d'assigner la fonction elle-même. –

0

Une meilleure méthode qui peut ê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 écrasée. Il y a deux résultats:
1- tout fonctionne bien quand aucune concurrence ne se produit (très haute possibilité),
2- premier appel n'arrive jamais (possibilité très faible mais cela arrivera de temps en temps et sera très difficile à repérer et reproduire)

Mais le code suivant utilise la 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; 
} 
1
<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> 
Questions connexes