2009-09-15 2 views
3

내 코드는 다음과 같습니다. 주석 처리 된 행을 참조하십시오. 요소 ID (스팬)가 하드 코드되면 작동합니다. id가 stateChanged에 전달 된 변수를 연결하여 만들어지면 작동하지 않습니다. 변수를 stateChanged에 전달할 수 없습니까? 뭐가 문제 야?xmlhttp.onreadystatechange 함수에서 편집하려는 ID의 이름을 어떻게 전달합니까?

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

감사합니다.

답변

8

는이

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

바위! 그것은 작동합니다! 감사. – Jen

+6

+1. 하지만 xmlhttp.onreadystatechange = stateChanged (id, counter);가 실제로'stateChanged (id, counter)'를 호출하고 함수 자체를 할당하는 것이 아니라 반환 값을'onreadystatechange'에 할당했다고 설명했으면 좋겠습니다. –

0

에 이전 호출이 완료되기 전에 여러 번 호출 할 수있는 더 나은 방법을 코드를 변경할 수 있습니다. multiplePassportPoints를 두 번 호출하면 xmlhttp의 이전 값을 덮어 씁니다. 두 가지 결과가 있습니다 :
동시성이 발생하지 않을 때 모든 것이 잘 동작합니다 (매우 높은 가능성),
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; 
} 
1
<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> 
관련 문제