2012-11-26 5 views
1

의 변수 범위 내가 코드처럼있어 :의 jQuery 방법, 자바 스크립트

function some_func_validate(some_id) { 
    var variable_to_return = false; // i wanna use that 
    $.ajax({ 
     type: 'GET', 
     url: '/something/'+some_id+'/check', 
     success: function(response){ 
      variable_to_return = true; // in this place 
     } 
    }); 
    return variable_to_return; 
} 

그래서, 거짓 값을 반환 code'll. HTML 문서의 DOM을 사용하지 않고 변수에 값을 할당하는 방법 (예 : 일부 태그의 html 속성에 값을 할당 한 다음 jQuery를 통해 값 가져 오기) ???

JavaScript에서 '전역'변수를 사용하는 방법은 무엇입니까? 아약스는 비동기이기 때문에

+0

여기에 코드를 사용하는 예입니다. 'variable_to_return'에 의존하는 모든 코드를 성공 콜백으로 이동하십시오. –

+0

'$ .ajax'은 (는) 비동기입니다. 자신 만의 연구를 해보세요. – zerkms

답변

1

, 당신은이

function some_func_validate(some_id, cb) { 

    $.ajax({ 
     url: '/something/'+some_id+'/check', 
     success: function(response){ 
      cb(response); 
     } 
    }); 

} 

같은 것을 할 그리고 당신은 비동기 호출을하는 동안이 작업을 수행 할 수 없습니다

some_func_validate(some_id, function(response){ 
    //handle response here 
}); 
0

사용하여 호출해야합니다. 동기 호출을 강제로 수행 할 수 있지만 서버가 응답을 보내기 전에 페이지가 동결됩니다. 비동기 추가 : 통화를 전환하십시오.

function some_func_validate(some_id) { 
    var variable_to_return = false; // i wanna use that 
    $.ajax({ 
     type: 'GET', 
     async: false, 
     url: '/something/'+some_id+'/check', 
     success: function(response){ 
      variable_to_return = true; // in this place 
     } 
    }); 
    return variable_to_return; 
} 

그러나 여전히 코드를 리팩터링하고 콜백에서만 변수를 사용하는 것이 좋습니다.

0

jQuery에는 버전 1.5 이후로 Deffered이라는 객체를 사용하여 콜백 및 비동기 호출의 관리를 처리하는 유틸리티가 있습니다. 이러한 유형의 객체를 사용하면 클라이언트가 일부 배경 작업이 완료 될 때 콜백을 추가하는 것이 더 쉽습니다.

function some_func_validate(some_id) { 
    var deferred = $.Deferred(), 
     context = { 
      id: some_id, 
      success: false 
     }; 

    $.ajax({ 
     type: 'GET', 
     url: '/something/'+some_id+'/check' 
    }) 
    .done(function(response){ 
     context.success = true; 
     context.content = response; 
     deferred.resolveWith(context); 
    }) 
    .fail(function() { 
     deferred.rejectWith(context) 
    }); 

    return deferred.promise(); 
} 

사용 예제 :

some_func_validate(5).then (
    function (context) { 
     // Handle successful validation. 
     console.log(context); 
    }, 
    function (context) { 
     // Handle failed validation. 
     console.log(context) 
    } 
); 

또 다른 사용 예 : 비동기 함수에서 반환 할 수

function logger (context) { 
    console.log(context); 
} 

function onSuccessfulValidation (context) { 
    // Handle successful validation. 
    // context contains {id, content, success} 
} 

function onFailedValidation (context) { 
    // Handle failed validation. 
    // context contains {id, success} 
} 

some_func_validate(3).then (
    [logger, onSuccessfulValidation], 
    [logger, onFailedValidation] 
); 
관련 문제