В функции xmlhttp.onreadystatechange, как мне передать имя идентификатора, который я хочу отредактировать?
-
07-07-2019 - |
Вопрос
Вот мой код.Посмотрите на закомментированную строку.Когда идентификатор элемента (который является промежутком) жестко задан, это работает.Когда идентификатор создается путем объединения переменных, переданных в 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;
}
}
Спасибо!
Решение
Вы можете изменить код на этот
xmlhttp.onreadystatechange = function () {
stateChanged(id,counter);
};
Другие советы
<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>
Лучший метод, который может быть вызван несколько раз до завершения предыдущего вызова.Обратите внимание, что если вы дважды вызовете multiplePassportPoints, ваше предыдущее значение 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;
}