In xmlhttp.onreadystatechange Funktion, wie gebe ich den Namen der ID I zu bearbeiten?

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

  •  07-07-2019
  •  | 
  •  

Frage

Hier ist mein Code. Siehe die Zeile, die auf Kommentar gesetzt ist. Wenn die Element-ID (die eine Spanne ist) fest einprogrammiert ist, funktioniert es. Wenn die ID durch Verknüpfung der Variablen übergeben in statechanged erstellt wird, funktioniert es nicht. Bin ich nicht Variablen übergeben, um statechanged erlaubt? Was ist los?

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; 
  }
}

Danke!

War es hilfreich?

Lösung

Sie können den Code auf diese ändern

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

Andere Tipps

 <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>

Eine bessere Methode, die mehrere Male vor dem vorherigen Anruf beendet aufgerufen werden kann. Beachten Sie, dass, wenn Sie multiplePassportPoints zweimal Ihren vorherigen Wert von xmlhttp rufen überschrieben wird. Es gibt zwei Ergebnisse:
1- alles funktioniert gut, wenn keine Parallelität auftritt (sehr hohe Wahrscheinlichkeit), Frankreich 2- erster Anruf nie passiert (sehr geringe Möglichkeit, aber es wird von Zeit zu Zeit passiert und wird sehr schwer zu erkennen und zu reproduzieren)

Aber der folgende Code verwendet lokalen Variable und kann (nicht getestet) sicher wieder anrufen und wieder.

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; 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top