Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jQuery.Get嵌套函数中获取var_Javascript_Jquery_Ajax_Return - Fatal编程技术网

Javascript 从jQuery.Get嵌套函数中获取var

Javascript 从jQuery.Get嵌套函数中获取var,javascript,jquery,ajax,return,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){

我想:

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

  }

要提醒registeredHours

直接返回数据,只有在关闭asynchronous GET for AJAX时才有效:

alert( getUserHours('r', '#reg-hours'));
不建议这样做,因为在您完成请求之前,浏览器将一直阻塞。相反,您应该通过使用函数回调继续遵循异步编程模型:

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

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

这意味着您不能直接从
getUserHours
函数返回数据。您需要一个回调函数来在数据准备就绪时启动

大概是这样的:

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

  }

jQuery1.5将通过新的
Deffered
和promise方法添加一些额外的实现方法。
  getUserHours('r', '#reg-hours', function(data) {
    alert(data);
  });