2011-02-11 10 views
0

내 변수는 글로벌이지만, 그녀는 같은 결과가 표시되지 않습니다변수가 실행 된 후 표시되지

function checkLiveRdv(salle, jour, dateus, heure) 
{ 
var resu; 
    var urlaction = myUrl; 

    $.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: urlaction, 
     data: myDatas, 
     success: function(message) 
     { 

     data = $.parseJSON(message); 
     if(data['nb']==1) 
      resu = "ok"; 
     else resu = "pasok"; 
     //this alert display the good result 
     alert (resu); 

     } 
    }); 
    //this alert display 'undefined', why ??? 
    alert(resu); 
} 

resu는 보관하지 않는 이유를 모르겠어요를 데이터 :/

+1

변수는 실제 전역 변수가 아니며 'var'이있는 함수 내에 정의되어 있기 때문에 함수 변수에 대한 로컬 변수입니다. – gnur

답변

1

합니다.

동기식 요청을해야하는 경우

는 false로 동기화 옵션을 설정 :

$.ajax({ 
    type: "POST", 
    async: false, 
    ... 
0

이 경우 $.ajax()은 비동기식이기 때문입니다. async: false를 포함 $.ajax() 수정 : 당신이 완료 될 때까지 $.ajax() 전화를 기다리고 있지 렸기 때문에입니다

$.ajax({ 
     type : 'POST', 
     dataType: 'json', 
     url  : urlaction, 
     data : myDatas, 
     async : false, 
     success : function(message) { 
     data = $.parseJSON(message); 
     if(data['nb']==1) 
      resu = "ok"; 
     else resu = "pasok"; 
      alert (resu); 
     } 
    }); 
+0

사실, 이제 작동합니다! – bahamut100

2

먼저 resu 변수가 글로벌되지 않습니다. checkLiveRdv 기능의 범위 내에있는 로컬입니다. 자바 스크립트의 전역 변수는 var 키워드없이 선언됩니다. 그러나 전역 변수를 생략하는 것은 좋은 방법입니다.

표시되는 첫 번째 경고는 아직 가치가없는 값인 resu을 표시합니다. 비동기 $.ajax은 나중에 완료되고 resu 값을 채우므로 올바르게 표시됩니다.

지금은 비동기 호출을 그대로 사용하겠습니다. 그리고 resu은 Ajax 콜백 내부에서만 값을 얻습니다.

+0

팁을위한 THanks :) – bahamut100

관련 문제