2012-07-20 3 views
-2

내 함수는 사용자가 금지되어 있는지 여부를 가져오고 팝업이 표시되는지 결정하는 변수를 반환하려고합니다. 하지만 내가 알았 듯이 getJSON 함수에서 변수를 반환 할 수는 없습니다.getJSON 반환 변수 .. 솔루션?

function fetchban() { 
    $.getJSON('/fetchban.php',function(data) { 

     if(data==0) { 

      var banned = data; 
     } else { 
      $.each(data,function(index,result) { 
      $('#ban-prompt').html(result); 
      $('.popup-background').show(); 
      $('#ban-container-2').show(); 
      }); 
     } 

    }); 

    return banned; 
} 

$('.button').click(function() { 
var banned = fetchban(); 

if(banned==0) { 

//display-popup 

} 

}); 

내가 fetchban 함수를 호출 라인을 많이 그래서 나는 함수에 getJSON을 선호있다. 해결 방안은 무엇인가?

+0

왜 getJSON을 사용합니까? .get() – Onheiron

+0

[jQuery getJSON - 호출자 함수에 대한 반환 값] 가능한 중복 사용 (http://stackoverflow.com/questions/1229307/jquery-getjson-return-value-to-the-caller-function) –

+0

{banned : "false", datas : {... 일반 객체}}와 같이 JSON 내부에 금지 플래그를 설정 한 다음 var ban = data.banned로 변경하십시오. – Onheiron

답변

3

기능에 두 가지 문제가 있습니다.

가장 중요한 것은 getJSON이 동기라고 가정합니다. 기본적으로 비동기입니다. 즉, fetchban에서 까지 반환은 검색된 데이터를 기반으로 한 값이 불가능합니다. 대신 fetchban은 결과와 함께 콜백을 허용해야합니다.

두 번째 (첫 번째 문제를 해결하면 어쨌든 멀리 갈 것이다), 당신이 (당신이 당신의 getJSON 성공 핸들러 내부에 그것을 를 선언 때문에) 선언되지 fetchban에서 변수를 반환하기 위해 노력하고 있다는 점이다.

function fetchban(callback) { 
    $.getJSON('/fetchban.php',function(data) { 
     var banned; 

     // ...figure out what `banned` should be from the `data`, 
     // I'm afraid I couldn't make sense of the code, looked 
     // like it always set `banned` to 0. 

     // Call the callback with the result 
     callback(banned); 
    }); 
} 

그리고 대신 :

그래서 당신은 같은 것을보고 fetchban을 변경 것

$('.button').click(function() { 
    fetchban(function(banned) { 
     if(banned==0) { 
      //display-popup 
     } 
    }); 
}); 

... 나 :

$('.button').click(function() { 
    var banned = fetchban(); 

    if(banned==0) { 
     //display-popup 
    } 
}); 

을 이렇게 훨씬 더, 일찍 가져와 이미에 해당 정보가있는 경우 click이 도착합니다. 사용자는 클릭 할 때 지연을 좋아하지 않으며 웹 왕복 여행 중 가장 좋은 경우조차도 사람에게 눈에.니다.

+0

어떻게해야합니까 "fetchban은 결과와 함께 콜백을 수락해야합니다"? – user892134

+0

@ user892134 : 업데이트를 참조하십시오. 또는 웹에서 약 757,521 개의 콜백 자습서와 예제를 확인할 수 있습니다. ;-) –