2017-04-16 43 views
0

IM使用CI3和jQuery,我需要执行getFechas(VAL)函数不是异步..所以这是我的代码获得价值(不是异步)

$('#datepicker1').on('change', function() { 

    $.when(getFechas($('#datepicker1').val())).done(function(a1){ 
    fechas = a1; 
    //console.log($('#datepicker1').val()); 
     console.log(a1); 
    console.log(a1.slice()); 
    }); 

}); 

和AJAX功能

function getFechas(val){ 
var venc =[]; 
$.ajax({ 
    type: "POST", 
    url: base_url+"index.php/admin/ajax_call/saldos", 
    data: {fecha: val}, 
    success: function (data) { 

     var i =1; 
     $.each(data, function (key, value) { 

      venc[i] = value.fecha_vencimiento; 
      // console.log(value.fecha_vencimiento); 

      // console.log(value.comuna_id + ':' + value.comuna_nombre); 
      i++; 

     }); 

    } 

    }); 
     return venc; 
} 

我需要访问阵列venc[] ....函数的返回值...和复制上fechas VAR值(fechas是全球性的空数组)

+0

如果一个函数调用异步函数,那么它不可能是同步的。如果你想要一个函数是同步的,那么它不能进行异步调用。 –

回答

1

您不能返回vencgetFechas。 Ajax是异步

返回$.ajax()承诺,当它解决您的$.when将解决。


简体版本允许运行演示:

function getFechas(val) { 
    // return promise 
    return $.ajax({ 
    type: "POST", 
    url: '...', 
    data: {....} 
    }).then(function(resp) { 
    // return processed data to next then() in chain 
    var venc = resp.map(function(item) { 
     return item.fecha_vencimiento 
    });  
    return venc; 
    }); 
} 

$.when(getFechas(/*datepickerValue*/)).done(function(venc) { 
    console.log(venc); 
}).fail(function(err){ 
    console.log('Request failed'); 
}); 

DEMO

参考:How do I return the response from an asynchronous call