2013-04-06 35 views
22

Desidero una funzione che restituisca un valore da una richiesta Ajax. Voglio interrompere l'esecuzione di javascript finché la funzione non ottiene il suo valore che viene restituito da una richiesta asincrona ajax. Qualcosa di simile:funzione che restituisce un valore dalla richiesta di chiamata ajax

function myFunction() { 
    var data; 
    $.ajax({ 
     url: 'url', 
     data: 'data to send', 
     success: function (resp) { 
      data = resp; 
     }, 
     error: function() {} 
    }); // ajax asynchronus request 
    return data; // return data from the ajax request 
} 
+2

Cosa significa la prima A in AJAX? – Barmar

+0

@Barmar Aaardvark! – Ian

risposta

32

È necessario registrare una funzione di callback, qualcosa di simile:

+2

Non è necessario memorizzarlo ancora in 'data'. Basta chiamare il callback – Ian

+1

@Ian ancora meglio del resto dei parenti :-) –

+1

@JanDvorak Non ho mai detto che non lo fosse :) Sto solo cercando di migliorare la risposta. – Ian

2

Uso async: false per la vostra richiesta Ajax dal Ajax è asincrona.

Impostare async su false significa che l'istruzione che si sta chiamando deve essere completata prima che sia possibile chiamare la successiva istruzione della funzione. Se si imposta async: true allora tale istruzione inizierà la sua esecuzione e verrà chiamata la prossima istruzione indipendentemente dal fatto che l'istruzione async sia stata completata.

Da jQuery docs:

By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false

+1

Devi dare una spiegazione migliore di quella. Mentre ciò potrebbe funzionare, l'OP probabilmente non capirà, dal momento che non capiscono il problema in questione. – Ian

3
$.ajax({ 
     url: 'url', 
     data: 'data to send', 
     async: false, 
     success: function (resp) { 
      data = resp; 
     }, 
     error: function() {} 
    }); // ajax synchronus request 
4

è necessario fare asyn = False come:

$.ajax({ 
    async: false, 
    // ... 
    success: function(jsonData) { 
    //Your Logic 
    } 
}); 
+1

Nel caso in cui si desideri una risposta sincrona, ovviamente. – Pere

5

Ajax è asincrono, il che significa che la chiamata ajax viene inviata ma il tuo codice continua a essere funzionante come prima senza fermarsi. Ajax non interrompe/sospende l'esecuzione fino a quando non viene ricevuta una risposta. Dovrai aggiungere una funzione di callback aggiuntiva o qualcosa del genere.

function myFunction() { 
var data; 
$.ajax({ 
    url: 'url', 
    data: 'data to send', 
    async: false, 
    success: function (resp) { 
     data = resp; 
     callback.call(data); 
    }, 
    error: function() {} 
}); // ajax asynchronus request 
return data; // return data from the ajax request 
    } 
+0

Devi effettivamente passare 'data' o' resp' al callback ... – Ian

+0

yes rgt ... .tahnx @lan .... per reindirizzarmi .... :) –

+1

Beh, probabilmente vorrai 'callback.call (this, data);' dato che il primo parametro di 'call' è per l'impostazione del contesto' this' nella funzione. – Ian

Problemi correlati