xmlhttp.onreadystatechange 함수에서 편집하려는 ID의 이름을 어떻게 전달하나요?
-
07-07-2019 - |
문제
여기 내 코드가 있습니다.주석 처리된 줄을 참조하세요.요소 ID(범위)가 하드코딩되면 작동합니다.stateChanged에 전달된 변수를 연결하여 ID를 생성하면 작동하지 않습니다.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;
}
제휴하지 않습니다 StackOverflow