2012-04-24 3 views
0

Ajax 함수가 true 또는 false (다른 함수에서 호출되는 일종의 유효성 검사 함수)를 반환하려고합니다. 그래서 다른 함수는이 값으로부터 참 또는 거짓 값을 얻어서 다음에 무엇을해야하는지 알 수 있습니다.Ajax 함수로 true 또는 false를 반환하십시오.

나는 이것을하기 전에 해봤지만 지금은 제대로 작동하지 않을 것이라고 확신한다. 나는 동기식 및 비동기식 호출을 시도했는데, onreadystatechange 함수 내부와 그 아래의 리턴이 있었고, 아무것도 가지고 있지 않았다.

는 아약스입니다 :

function saveBooking(){ 
    var service_ids=document.getElementById("allservice_ids").value; 
    var provider_ids=document.getElementById("allprovider_ids").value; 
    var chosen_time=document.getElementById("chosen_time").value; 
    var chosen_date=document.getElementById("chosen_date").value; 
    var message=document.getElementById("message").value; 

    var parameters="service_ids="+service_ids+"&provider_ids="+provider_ids+"&time="+chosen_time+"&date="+chosen_date+"&you=<?php echo $_SESSION['user_mail']; ?>&message="+message 

    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.open("POST","include/save_booking.php",true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
    xmlhttp.onreadystatechange = function() {//Call a function when the state changes. 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      var yesorno=xmlhttp.responseText; 
      if(yesorno=="ok"){ 
       return true; 
      } 
      else{ 
       document.getElementById("booking_error").innerHTML = xmlhttp.responseText; 
       return false;    
      } 
     } 
    } 
    xmlhttp.send(parameters); 

    } 

는 지금 save_booking.php 단지 라인 <?php echo "ok"; ?>을 포함, 내가 테스트 목적으로이로 감소.

누군가가이 기능을 작동시키는 방법을 말해 줄 수 있습니까? 다른 함수에서, 내가 이렇게하면 :

if(saveBooking()){ 
     alert(saveBooking()); 
    } 

단지 'undefined'라는 단어를 경고합니다.

jQuery에 익숙하지 않으므로 'jQuery 사용'이 도움이되지 않습니다.

+0

그래도 jQuery를 사용하십시오. 이 거대한 코드 조각을 이해할 수 있다면 jquery가 완전히 이해할 수 있도록 약 7 분이 소요됩니다. 현명한 사람이 되려고하지는 않지만 jquery는 혼란과 오류뿐만 아니라 작성한 코드도 많이 제거합니다. – Dutchie432

+0

Firebug를 열고 NET 탭을 클릭 한 다음 HTTP 응답을 봅니다. –

+0

return true 대신 .. 몇 가지 변수를 시도해보고 다른 경우에는 경고합니다. 단지 테스트 용 – zod

답변

1

현재 return 문은 처리하지 않는 onreadystatchange 메서드가 반환하는 내용 만 결정합니다 (잘못된 경우 수정하십시오. 적어도 반환 값에 액세스하는 방법을 모르겠습니다). 당신이 원하는 것은이 같은 것을 할 수 있도록 saveBooking의 반환에 영향을 미칠 수 있습니다 : 그런데

var responseOk = false; 
xmlhttp.onreadystatechange = function() {//Call a function when the state changes. 
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     responseOk = (xmlhttp.responseText=="ok"); 
     if(!responseOk) { 
      document.getElementById("booking_error").innerHTML = xmlhttp.responseText; 
     } 
    } 
} 
... 
return responseOk; 

당신이 jQuery를 피하려는 이유는 특별한 이유가없는 한, (예를 들어, 나는 개인적으로 할 배우고 싶은 먼저 나 자신을 먼저 생각해보십시오.) 나는 그것을 강력하게 제안합니다. 그것은 당신을 위해 복잡하지 않을 것이고 훨씬 더 쉽게 만들 것입니다.

MilkyWayJoe의 주석을 지원해야합니다. 비동기 HTTP 요청을 생성 한 다음 반환 값을 기다리는 것이 좋습니다. 현재 위의 예제는 대부분 return을 반환 할 것입니다. 왜냐하면 스크립트가 return 문에 도착할 때까지 요청이 완료되지 않았기 때문입니다. 요청을 만드는 함수와 요청의 콜백이 섞이지 않도록하는 것이 좋습니다.

+0

비슷한 것을 시도했지만 변수를 참조 할 때 onreadystatechange 함수 외부에서 responseOk라는 이름을 지정하면 오류가 발생합니다. 함수 안에서 선언하고 있었지만, 문제 일 수도 있습니다. – jovan

+0

예,'saveBooking'의 범위에서 로컬로 정의해야합니다. 그렇지 않으면'var'을 생략하여 전역 변수로 만들지 않는 한 거기에서 사용할 수 없습니다. – Armatus

+0

내가 편집하기 전에 그것에 대해 뭔가를 쓰려고했다. :) – MilkyWayJoe

관련 문제