Valor de retorno desde el interior de la función $ .ajax ()

¿Cómo devuelvo un valor desde el interior de una función $.ajax ?

Esta es mi configuración básica:

 function something(){ var id = 0; $.ajax({ 'url':'/some/url', 'type':'GET', 'data':{'some':'data'}, 'success':function(data){ id = data['id']; } }); return id; } 

Use una función de callback, es la forma de JavaScript:

 function something(callback){ $.ajax({ 'url':'/some/url', 'type':'GET', 'data':{'some':'data'}, 'success': callback }); } something(function (data) { data['id']; // use it here }) 

Además de usar una función de callback como otros señalaron, otra opción sería cambiarla a una solicitud synchronous :

 function something(){ var id = 0; $.ajax({ 'url':'/some/url', 'type':'GET', 'async':false, 'data':{'some':'data'}, 'success':function(data){ id = data['id']; } }); return id; } 

Tenga en cuenta que una llamada síncrona es una llamada de locking mientras la solicitud está activa.

Como AJAX es asíncrono, no puede, porque su llamada AJAX no regresará inmediatamente. Lo que puede hacer en cambio, lo que la gente suele hacer, es tomar una función de callback y luego llamarla con el valor de retorno. Por ejemplo:

 function something(callback) { var id = 0; $.ajax({ 'url':'/some/url', 'type':'GET', 'data':{'some':'data'}, 'success':function(data){ callback(data['id']); } }); } something(function(id) { alert(id); }); 

Tenga en cuenta que siempre puede hacer que su solicitud sea sincrónica y esperará hasta que tenga datos y pueda devolverla de inmediato, pero si su pedido toma más de un momento, toda la ejecución del script, y potencialmente la página, se detendrá hasta que devoluciones.