2012-10-29 2 views
0

팩스 전송 양식의 유효성을 검사 할 때 소프트웨어 팩스 패키지와 함께 이미 팩스가 전송되었는지 확인하고 있습니다. 스크립트에 의해 수행되는 테이블에 대한 간단한 쿼리입니다. 이전 쿼리가 있으면 텍스트를 반환하고 그렇지 않으면 텍스트를 반환합니다.xmlhttp.responseText 뒤에 변수가 설정되지 않는 이유는 무엇입니까?

일부 응답 텍스트 (예 : "팩스가 이미 전송되었습니다.")가 있어도 flag_stop_fax 변수가 여전히 0으로 설정되어 있습니다.

flag_stop_fax = 0; 
xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     var response = xmlhttp.responseText; 
     if (response!='') 
     { 
      flag_stop_fax = 1; 
      alert(response); 
     } 
    } 
} 

xmlhttp.open('GET','/check_for_active_fax.php?fax_number=' + fax_number + '&t='+Math.random(),true); 
xmlhttp.send(); 

alert(flag_stop_fax); // shows "0" even when I have a non-blank response from xmlhttp.responseText 

다른 인증 비트가 있지만이 스크립트는 문제를 잘 보여줍니다. 나는 't'변수를 아무 것도 사용하지 않습니다. 이것은 브라우저 캐싱에 대한 보호 장치 일뿐입니다.

그렇다면 flag_stop_fax가 0으로 설정되지 않는 이유는 무엇입니까?

+1

AJAX는 '비동기식'입니다. 콜백 코드가 실행되기 전에 다음에 주석을 달았습니다. – TheZ

+1

이 질문에 대한 답변을 먼저 - Ajax의 A는 무엇을 의미합니까? – asawyer

답변

0

먼저 AJAX가 비동기임을 이해해야합니다. 당신이 xmlhttp.send();을 실행하면 요청이 전송 및 코드 실행이 계속됩니다, 그래서 실행되는 다음 일은이다 :

이 때
alert(flag_stop_fax); 

, flag_stop_fax 여전히 제로, 요청이 아직 완료되지 않았기 때문에.

xmlhttp.onreadystatechange에 지정한 콜백 함수는 요청이 완료되었을 때 만 실행합니다.. 실행은 순차적이지 않습니다. 요청이

  • alert(flag_stop_fax); 시작되었습니다 - -

    1. xmlhttp.send(); 변수가

      을 경고한다 ...
      ...
      (나중에 약간의 시간, 서버 : 그것은 뭔가처럼 대답)

      xmlhttp.onreadystatechange이 실행되면 flag_stop_fax 변수가 변경됩니다.

  • +0

    수표가 true를 반환하면 양식 제출을 중단 할 수 없습니다 (즉, 응답이 비어 있지 않음)? –

    +0

    방법이 있습니다. 양식 제출을 중단해야합니다. 응답을 기다리십시오. 그리고 응답이 사실이라면 양식을 제출하십시오. 원하는 것은 무엇이든지 콜백에서해야합니다. 요청이 언제 끝날지 알 수 없기 때문입니다. – kapa

    +0

    sleep()로 할 수 있습니까? –

    관련 문제