2012-10-10 10 views
6

Napisałem prostą, ogólną funkcję ajax, którą można wywołać w moim skrypcie za pomocą wielu funkcji. Nie jestem pewien, w jaki sposób uzyskać dane zwracane do funkcji ajax z powrotem do dzwoniącego.jQuery ajax - zwracanie danych do funkcji wywołującej

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

Czy istnieje sposób na zwrócenie danych ajax do funkcji wywołującej?

+2

Nr funkcji wywołującej zakończy działanie przed wywołanie AJAX jest jeszcze rozpoczęte. Możesz zrobić to synchronicznie ... ale to nie jest AJAX. – TheZ

+0

Nie mógł on przekazać funkcji wywołania zwrotnego (prawdopodobnie anonimowej) do funkcji 'doAjaxRequest', a następnie wywołać ją z zamknięcia sukcesu? –

+0

@ TheZ-- crap-- oczywiste teraz. Dzięki za pomoc z głupim pytaniem! – julio

Odpowiedz

11

$.ajax jest asynchroniczny, więc aby odzyskać dane, należy przekazać wywołanie zwrotne do funkcji doAjaxRequest. Dodałem parametr wywołania zwrotnego do doAjaxRequest i zamiast używać wyniku doAjaxRequest, kod, który obsługuje odpowiedź, znajduje się w funkcji wywołania zwrotnego.

// 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 - dzięki! To działa idealnie. – julio

-1

myślę pomocy pełną wam tym przykładzie

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

function fun2() 
{ 

alert(testajax()) 

} 

można zauważyć jedną rzecz: async false