2017-04-16 44 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