Как передать имя идентификатора, который я хочу изменить, в функции xmlhttp.onreadystatechange? - PullRequest
3 голосов
/ 15 сентября 2009

Вот мой код. Смотрите строку, которая закомментирована. Когда идентификатор элемента (который является диапазоном) жестко запрограммирован, он работает. Когда идентификатор создается путем объединения переменных, переданных в stateChanged, он не работает. Мне не разрешено передавать переменные в stateChanged? Что не так?

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

Спасибо! * * 1004

Ответы [ 3 ]

8 голосов
/ 15 сентября 2009

Вы можете изменить код на этот

xmlhttp.onreadystatechange = function () {
        stateChanged(id,counter);
    };    
1 голос
/ 22 июля 2012
 <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>
0 голосов
/ 15 сентября 2009

Лучший метод, который можно вызывать несколько раз до завершения предыдущего вызова. Обратите внимание, что если вы дважды вызовете множественныеPassportPoints, ваше предыдущее значение xmlhttp будет перезаписано. Есть два результата:
1 - все работает нормально, когда нет параллелизма (очень высокая вероятность),
2- первый звонок никогда не происходит (очень низкая вероятность, но он будет происходить время от времени, и его будет очень трудно обнаружить и воспроизвести)

Но следующий код использует локальную переменную и может (не проверяться) вызывать снова и снова.

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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...