2012-10-10 27 views
6

Ho scritto una semplice funzione generica ajax che può essere chiamata da più funzioni nel mio script. Non sono sicuro di come restituire i dati alla funzione Ajax al chiamante.jQuery ajax-- restituire dati alla funzione di chiamata

// some function that needs ajax data 
function myFunction(invoice) { 
    // pass the invoice data to the ajax function 
    var result = doAjaxRequest(invoice, 'invoice'); 
    console.dir(result); // this shows `undefined` 
} 

// build generic ajax request object 
function doAjaxRequest(data, task) { 
    var myurl = 'http://someurl'; 
    $.ajax({ 
     url: myurl + '?task=' + task, 
     data: data, 
     type: 'POST', 
     success: function(data) { 
      console.dir(data); // this shows good data as expected 
      return data; // this never gets back to the calling function 
     } 
    }); 
} 

C'è un modo per restituire i dati Ajax alla funzione di chiamata?

+2

No. La funzione chiamante ha terminato l'esecuzione prima che la chiamata AJAX è ancora iniziata. Potresti renderlo sincrono ... ma poi non è AJAX. – TheZ

+0

Non è possibile passare una funzione di callback (possibilmente anonima) alla funzione 'doAjaxRequest' e quindi richiamarla dalla chiusura di successo? –

+0

@ TheZ-- crap-- ovvio ora. Grazie per l'aiuto con una domanda stupida! – julio

risposta

11

$.ajax è asincrono, quindi per recuperare i dati è necessario passare una richiamata alla funzione doAjaxRequest. Ho aggiunto un parametro di callback a doAjaxRequest e invece di utilizzare il risultato di doAjaxRequest il codice che gestisce la risposta è nella funzione di callback.

// some function that needs ajax data 
function myFunction(invoice) { 
    // pass the invoice data to the ajax function 
    doAjaxRequest(invoice, 'invoice', function (result) { 
     console.dir(result); 
    }); 
} 

// build generic ajax request object 
function doAjaxRequest(data, task, callback) { 
    var myurl = 'http://someurl'; 
    $.ajax({ 
     url: myurl + '?task=' + task, 
     data: data, 
     type: 'POST', 
     success: function(data) { 
      console.dir(data); // this shows good data as expected 
      callback(data); 
     } 
    }); 
} 
+0

@ Brigham-- grazie! Funziona perfettamente. – julio

-1

penso aiuto completo a voi questo esempio

function testAjax() { 
    var result=""; 
    $.ajax({ 
     url:"getvalue.php", 
     async: false, 
     success:function(data) { 
     result = data; 
     } 
    }); 
    return result; 
} 

function fun2() 
{ 

alert(testajax()) 

} 

si nota una cosa async: false

Problemi correlati