从jQuery.get嵌套函数中获取var

时间:2011-01-13 21:15:36

标签: javascript jquery ajax return

  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'));

提醒registeredHours

2 个答案:

答案 0 :(得分:1)

直接返回数据只有在关闭AJAX的异步GET时才会起作用:

$.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);
});

答案 1 :(得分:0)

当数据准备就绪时,将调用您尝试返回的回调函数,这意味着数据是异步发送的。

这意味着您无法直接从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);
  });