2010-01-20 3 views
1

이 파일을 실행할 때마다 코드가 전송 기능이 실행되는 지점까지 실행 된 다음 경고 ("보낸")를 꺼내면 바로 뒤에 경고 기능이있는 경우에만 코드가 실행됩니다. 그 다음에 ServerReadyyState은 1로 응답합니다.Ajax send 함수가 실행되지 않습니까?

무엇이 문제 일 수 있습니까? 누군가 제발 도와주세요, 내 로컬 컴퓨터에서 내 개인 서버에 시도하고 동일한 결과를 얻었다. 어떤 도움이라도 대단히 감사합니다.

강령 : asynchronus이

/** 
* @author d 
*/ 
var xhr; 

function getPlants(xhr) { 
    try { 
    xhr = new XMLHttpRequest(); 
    } catch (microsoft) { 
    try { 
     xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (othermicrosoft) { 
     try { 
     xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (failed) { 
     xhr = false; 
     alert("ajax not supported"); 
     } 
    } 
    } 
    xhr.open("GET", "db_interactions.php", true); 


    xhr.send(null); 
    alert("sent"); //the send function only works if this alert functions is here 
    if (xhr.readyState == 4) { 

    return xhr.responseText; 
    } else { 
    alert("Server ReadyState is:" + xhr.readyState); 
    xhr.abort(); 
    //getPlants(xhr);  
    } 
} 

답변

1

AJAX이다. 즉시 준비 상태를 확인할 수는 없습니다.

올바른 디자인 패턴은 준비 상태가 변경 될 때 실행되도록 AJAX 호출에 대한 함수를 할당하는 것입니다. 그래서, 당신은 출력을 처리 할 준비가되면 상태가 4 인 경우

xhr.onreadystatechange = function() { alert('It changed!') } 

에서 기능, 당신은 확인하고 싶은거야. 그렇지 않은 경우 준비 상태가 4가되기 전에 해당 함수가 몇 번 호출되기 때문에 아무 것도하지 않습니다.

+0

덕분에 많이 도움이되었습니다. –

0

요청에 어느 정도 시간이 걸립니다. 경고()를 추가하면 사용자가 확인을 클릭 할 때까지 코드가 중지됩니다. 그래서 당신이 그것을 제거하면 요청이 보내지고 즉시 확인됩니다. 완료되지 않은 요청이 발생했습니다. 당신이 당신의 코드를 변경

:

xhr.onreadystatechange=state_change 
xhr.send(null); 

function state_change() { 
    if(xhr.readyState==4) { 
     return xhr.responseText; 
    } else { 
     alert("Server ReadyState is:"+xhr.readyState);  
    } 
} 

이 경우 state_change이 때마다 상태가 변경 호출되는 등의 특정 기능. 따라서 요청이 완료되거나 오류 코드가 나타날 때까지 기다릴 수 있습니다.

+0

감사합니다. –

관련 문제