2011-01-13 5 views
0
function getUserHours(tyPe, tarGet){ 
    $.get('/activities/search', { 'type': tyPe }, 
    function(data){ 
    var hourResultData = jQuery.parseJSON(data); 
    var registeredHours = 0; 
    for (var i in hourResultData.activities){ 
     registeredHours += parseFloat(hourResultData.activities[i].hours); 
    } 
    $(tarGet).empty().append(registeredHours); 
    return registeredHours; 
    }); 

    } 

내가 원하는 : 당신이 AJAX의 비동기 GET 전원을 끌 경우jQuery.get 중첩 된 함수에서 VAR을 얻기

alert(getUserHours('r', '#reg-hours')); 

에만 작동합니다 직접 registeredHours

답변

1

반환 데이터를 경고 :

$.ajax({ 
    type: 'GET', 
    url: '/activities/search', 
    data: { 'type': tyPe }, 
    async : false, 
    success : function() { } 
}); 

요청이 완료 될 때까지 브라우저가 차단되므로 권장하지 않습니다. 대신 당신은 함수 콜백을 사용하여 비동기 프로그래밍 모델에 따라 계속해야합니다

$.ajax({ 
    type: 'GET', 
    url: '/activities/search', 
    data: { 'type': tyPe }, 
    async : false, 
    success : function() { } 
}); 

function getUserHours(tyPe, tarGet, callback) 
{ 
    $.get('/activities/search', { 'type': tyPe }, 
    function(data) 
    { 
     var hourResultData = jQuery.parseJSON(data); 
     var registeredHours = 0; 
     for (var i in hourResultData.activities){ 
      registeredHours += parseFloat(hourResultData.activities[i].hours); 
     } 
     $(tarGet).empty().append(registeredHours); 
     if($.isFunction(callback)) 
      callback(registeredHours); 
    }); 
} 

getUserHours('r', '#reg-hours', function(hours) { 
    alert(hours); 
}); 
+0

jQuery 1.5는 새로운'Deffered' 및 promise 메소드로이 작업을 수행하는 몇 가지 추가 방법을 추가 할 것입니다. –

+0

재미있는 것, 그 부분을 조사해야합니다. – Daff

0

데이터를 준비 할 때부터 반환하려는 콜백 함수가 데이터를 의미라고는 asyncronously 전송됩니다.

즉, getUserHours 함수에서 직접 데이터를 반환 할 수 없습니다. 데이터가 준비되면 콜백 함수가 필요합니다. 이 같은

뭔가 :

function getUserHours(tyPe, tarGet, callback){ 
    $.get('/activities/search', { 'type': tyPe }, 
    function(data){ 
    var hourResultData = jQuery.parseJSON(data); 
    var registeredHours = 0; 
    for (var i in hourResultData.activities){ 
     registeredHours += parseFloat(hourResultData.activities[i].hours); 
    } 
    $(tarGet).empty().append(registeredHours); 

    callback(registeredHours); // callback, send back data to callback function 
    }); 

    } 

그런 다음 getUserHours에 매개 변수로 익명 함수를 보냅니다.

getUserHours('r', '#reg-hours', function(data) { 
    alert(data); 
    }); 
관련 문제