En la función xmlhttp.onreadystatechange, ¿cómo paso el nombre de la ID que quiero editar?

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

  •  07-07-2019
  •  | 
  •  

Pregunta

Aquí está mi código. Vea la línea que está comentada. Cuando el id del elemento (que es un lapso) está codificado, funciona. Cuando la identificación se crea concatenando las variables pasadas a stateChanged, no funciona. ¿No se me permite pasar variables a stateChanged? ¿Qué pasa?

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

¡Gracias!

¿Fue útil?

Solución

Puedes cambiar el código a esto

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

Otros consejos

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

Un método mejor que se puede llamar varias veces antes de que finalice la llamada anterior. Tenga en cuenta que si llama a MultiplePassportPoints dos veces, se sobrescribirá su valor anterior de xmlhttp. Hay dos resultados:
1- todo funciona bien cuando no ocurre concurrencia (posibilidad muy alta),
2- la primera llamada nunca ocurre (posibilidad muy baja pero ocurrirá de vez en cuando y será muy difícil de detectar y reproducir)

Pero el siguiente código usa una variable local y podría (no probado) ser seguro llamar una y otra vez.

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; 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top