2012-01-03 4 views
1

값을 확인하기 위해 양식을 제출할 때 몇 가지 AJAX 게시물을 수행하는 매우 복잡한 기능이 있습니다. POST에서 리턴 된 값에 따라 제출이 작동하거나 실패해야합니다. 전역 부울을 사용하여 함수 전체에서 true 또는 false로 설정 한 다음 부울이 'true'로 변경되었는지 끝에서 확인하고 'return false;'를 호출하면이 작업을 수행 할 수 있다고 생각했습니다.jQuery 포스트 콜백 조건에서 거짓 반환

그러나 이것은 실패합니다. 나는 그것을 읽었으며 AJAX 호출이 비동기 적이기 때문에 코드가 순차적으로 실행되지 않기 때문이라고 생각한다.

내 코드는 다음과 같다 : 나는 비슷한 jquery - return value from callback function (in post request) into the function its inside of?의 예를 발견하지만 난 틀림없이 좋은 아니에요 (I가해야 할 일의 맥락에서 주위에 내 머리를 얻기 위해 고군분투

$('.to-step-3').click(function(){ 
var shape = ''; 
blnError = false; 
$.post('/base/RoomBuilder/GetRoomShape.aspx', function(data) { 
    if(data.substring(0,5) == 'Error'){ 
    alert(data); 
    blnError = true; 
    }else{ 
    shape = data; 

    $.post('/base/RoomBuilder/GetRoomDimensions.aspx', function(data2) { 
     if(data2.substring(0,5) == 'Error'){ 
     alert(data2); 
     blnError = true; 
     }else{ 
     var arrDims = data2.split('_'); 
     var l = arrDims[0]; 
     var w = arrDims[1]; 
     var sl = arrDims[2]; 
     var ll = arrDims[3]; 
     var sw = arrDims[4]; 
     var lw = arrDims[5]; 
     var failMessage = 'Please enter all required dimensions to build your room'; 

     switch(shape) { 
      case 'square': 
      if(!(notNullOrEmpty(l))){ 
       alert(failMessage); 
       blnError = true; 
      } 
      break; 
      case'rectangle': 
      if(!(notNullOrEmpty(l)) || !(notNullOrEmpty(w))){ 
       alert(failMessage); 
       blnError = true; 
      } 
      break; 
      case'lshaped': 
      if(!(notNullOrEmpty(sl)) || !(notNullOrEmpty(ll)) || !(notNullOrEmpty(sw)) || !(notNullOrEmpty(lw))){ 
       alert(failMessage); 
       blnError = true; 
      } 
      break; 
      case'lshapedalt': 
      if(!(notNullOrEmpty(sl)) || !(notNullOrEmpty(ll)) || !(notNullOrEmpty(sw)) || !(notNullOrEmpty(lw))){ 
       alert(failMessage); 
       blnError = true; 
      } 
      break; 
     } 
     } 
    }); 


    } 
}); 

if(blnError == true){ 
    return false; 
}else{ 
    return true; 
} 

}); 

자바 스크립트에서!)

내가 길을 너무 오래 꼼짝 않고 바라 보았으니 아무도 올바른 방향으로 나를 가리 키지 못했을 까? 모두에게 감사드립니다.

답변

1

jQuery post은 본질적으로 비동기이므로 Ajax 응답이 오기 전에 if 조건이 이미 실행되었습니다. 아약스 응답이 올 때까지 실행 대기 상태로 만들려면 jQuery ajax async 속성을 false로 설정할 수 있습니다. , 그냥 동기 호출하게하는 것입니다 문제를 해결하기 위해이

$.ajax({ 
    url: '/base/RoomBuilder/GetRoomDimensions.aspx', 
    async: false, 
    type: 'post', 
    success: function(){ 
     //Your logic here 
    } 
}); 

//Now check the condition here 
if(blnError == true){ 
    return false; 
}else{ 
    return true; 
} 
0

간단한 방법을 시도

$.ajaxSetup({async: false}); 

$.post(..); 

$.ajaxSetup({async: true}); 
관련 문제