Получить var из вложенной функции jQuery.get - PullRequest
0 голосов
/ 14 января 2011
  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;
   });

  }

Я хочу:

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

, чтобы предупредить зарегистрированных часов

Ответы [ 2 ]

1 голос
/ 14 января 2011

Возврат данных напрямую будет работать, только если вы отключите асинхронный GET для AJAX:

$.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 голосов
/ 14 января 2011

Функция обратного вызова, из которой вы пытаетесь вернуться, вызывается, когда данные готовы, это означает, что данные отправляются асинхронно.

Это означает, что вы не можете вернуть данные напрямую из вашей функции 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.

* 1011.*
...