Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tengo algo como esto, donde es una simple llamada a un script que me devuelve un valor,
206
una cadena ...
function testAjax() {
$.ajax({
url: "getvalue.php",
success: function(data) {
return data;
});
entonces, ¿cómo puedo devolver el valor? el siguiente código tampoco parece funcionar ...
function testAjax() {
$.ajax({
url: "getvalue.php",
success: function(data) {
});
return data;
3 woah pregunta 8 años se duplicó con una pregunta de 6 años - alguien inútil
23/08/19 a las 2:44
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 1/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
La única forma de devolver los datos de la función sería realizar una llamada sincrónica en
lugar de una llamada asincrónica, pero eso congelaría el navegador mientras espera la
418 respuesta.
function testAjax(handleData) {
$.ajax({
url:"getvalue.php",
success:function(data) {
handleData(data);
});
Llámalo así:
testAjax(function(output){
});
Supongo que agregar el estado [éxito] retrasaría un poco y sería más preciso llamar solo cuando el
estado es 400 exitoso. - yo no
6 de enero de 2016 a las 17:03
1 @iamsirjayesh ¡Haré matemáticas por ti, solo 5,5 años! ... sin embargo útil respuesta. - Cirelli94
28 de
junio de 2017 a las 14:06
12 success y error están siendo obsoletos en jQuery 1.8. Deberías empezar a usar .done() y
.fail() . Consulte la documentación . - FibreChips
7/07/2017 a las 20:45
3 Lo que está en desuso son las funciones de manipulación de devolución de llamada (por ejemplo,
.error, .success), no los parámetros del método ajax. Vea los comentarios en este hilo.
stackoverflow.com/a/10931891/4490454 - EGS
2 de enero de 2018 a las 9:21
1 @Mike: Lo que pasa es que no puedes obtener el resultado de la llamada a menos que tengas una
TARDIS. Como la llamada es asincrónica, el resultado llegará después de que regrese la llamada. Puede
considerar el uso de promesas proporcionadas en otras respuestas aquí, lo que le permitirá devolver
algo de la llamada aunque el resultado aún no haya llegado. En algún momento tienes que esperar el
resultado de todos modos, una promesa te permite hacerlo en una parte diferente del código. - Guffa
3/08/19 a las 22:42
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 2/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
Si pudiera explicar por qué desea devolver los datos y qué desea hacer con ellos más
adelante, entonces podría darle una respuesta más específica sobre cómo hacerlo.
function testAjax() {
$.ajax({
url: "getvalue.php",
success: function(data) {
return data;
});
function testAjax() {
return $.ajax({
url: "getvalue.php"
});
Puede almacenar su promesa, puede pasarla, puede usarla como un argumento en llamadas a
funciones y puede devolverla desde funciones, pero cuando finalmente desee usar sus datos
devueltos por la llamada AJAX, debe Hazlo asi:
promise.success(function (data) {
alert(data);
});
Si sus datos están disponibles en este momento, esta función se invocará inmediatamente. Si
no es así, se invocará tan pronto como los datos estén disponibles.
El objetivo de hacer todo esto es que sus datos no están disponibles inmediatamente después
de la llamada a $ .ajax porque son asincrónicos. Promises es una buena abstracción para que
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 3/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
las funciones digan: No puedo devolverte los datos porque aún no los tengo y no quiero
bloquear y hacerte esperar, así que aquí tienes una promesa y podrás úselo más tarde, o
simplemente para dárselo a otra persona y terminar con él.
ACTUALIZACIÓN (2015)
Actualmente (a marzo de 2015) jQuery Promises no es compatible con la especificación
Promises / A +, lo que significa que es posible que no cooperen muy bien con otras
implementaciones compatibles con Promises / A + .
Sin embargo, jQuery Promises en la próxima versión 3.x será compatible con la especificación
Promises / A + (gracias a Benjamin Gruenbaum por señalarlo). Actualmente (a mayo de 2015)
las versiones estables de jQuery son 1.xy 2.x.
Lo que expliqué anteriormente (en marzo de 2011) es una forma de usar jQuery Deferred
Objects para hacer algo de forma asincrónica que en el código síncrono se lograría al devolver
un valor.
Pero una llamada de función síncrona puede hacer dos cosas: puede devolver un valor (si
puede) o lanzar una excepción (si no puede devolver un valor). Promises / A + aborda ambos
casos de uso de una manera que es casi tan poderosa como el manejo de excepciones en
código síncrono. La versión de jQuery maneja el equivalente a devolver un valor muy bien,
pero el equivalente al manejo de excepciones complejas es algo problemático.
Para conocer las diferencias entre jQuery y otras implementaciones, y cómo convertir las
promesas de jQuery en compatibles con Promises / A +, consulte Viniendo de jQuery por Kris
Kowal et al. en la wiki de la biblioteca Q y Promises llegan en JavaScript por Jake Archibald en
HTML5 Rocks.
function testAjax() {
return $.ajax({
url: "getvalue.php"
});
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 4/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
Para que devuelva una promesa real, puede cambiarlo a, utilizando el método de Q wiki :
function testAjax() {
return Q($.ajax({
url: "getvalue.php"
}));
function testAjax() {
return Promise.resolve($.ajax({
url: "getvalue.php"
}));
Para usar ES6 Promises hoy, puede usar el módulo es6-promise de polyfill() Jake Archibald.
Para ver dónde puede usar ES6 Promises sin el polyfill, consulte: ¿Puedo usar: Promesas ?
http://bugs.jquery.com/ticket/14510
https://github.com/jquery/jquery/issues/1722
https://gist.github.com/domenic/3889970
http://promises-aplus.github.io/promises-spec/
http://www.html5rocks.com/en/tutorials/es6/promises/
Futuro de jQuery
Las versiones futuras de jQuery (a partir de 3.x; las versiones estables actuales a mayo de 2015
son 1.xy 2.x) serán compatibles con la especificación Promises / A + (gracias a Benjamin
Gruenbaum por señalarlo en los comentarios). "Dos cambios que ya hemos decidido son la
compatibilidad Promise / A + para nuestra implementación diferida [...]" ( jQuery 3.0 y el futuro
del desarrollo web ). Para obtener más información, consulte: jQuery 3.0: Las próximas
generaciones de Dave Methvin y jQuery 3.0: Más interoperabilidad, menos Internet Explorer
de Paul Krill.
Charlas interesantes
Boom, Promises / A + nació de Domenic Denicola (JSConfUS 2013)
Redención del infierno de las devoluciones de llamada por Michael Jackson y Domenic
Denicola (HTML5DevConf 2013)
Promesas de JavaScript de David M. Lee (noviembre de 2014)
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 5/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
ACTUALIZACIÓN (2016)
Hay una nueva sintaxis en ECMA-262, sexta edición, sección 14.2 llamada funciones de flecha
que se pueden usar para simplificar aún más los ejemplos anteriores.
promise.success(function (data) {
alert(data);
});
puedes escribir:
o con:
Vea esta respuesta para ver por qué siempre debe usar controladores de rechazo con
promesas:
Por supuesto, en este ejemplo, podría usar solo promise.then(alert) porque está llamando
alert con los mismos argumentos que su devolución de llamada, pero la sintaxis de flecha es
más general y le permite escribir cosas como:
No todos los navegadores admiten esta sintaxis todavía, pero hay ciertos casos en los que
está seguro de en qué navegador se ejecutará su código, por ejemplo, al escribir una
extensión de Chrome , un complemento de Firefox o una aplicación de escritorio usando
Electron, NW.js o AppJS (consulte esta respuesta para obtener más detalles).
http://caniuse.com/#feat=arrow-functions
http://kangax.github.io/compat-table/es6/#test-arrow_functions
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 6/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
ACTUALIZACIÓN (2017)
Hay una sintaxis aún más nueva en este momento llamada funciones asíncronas con una
nueva await palabra clave que en lugar de este código:
functionReturningPromise()
te permite escribir:
try {
console.log('Data:', data);
} catch (error) {
console.log('Error:', error);
Solo puede usarlo dentro de una función creada con la async palabra clave. Para obtener más
información, consulte:
https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Statements/async_function
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
http://caniuse.com/async-functions
http://node.green/#ES2017-features-async-functions
En lugares donde no tiene soporte nativo async y await puede usar Babel:
https://babeljs.io/docs/plugins/transform-async-to-generator/
o con una sintaxis ligeramente diferente, un enfoque basado en un generador como en las
co corrutinas de Bluebird:
https://www.npmjs.com/package/co
http://bluebirdjs.com/docs/api/promise.coroutine.html
Más información
Algunas otras preguntas sobre promesas para obtener más detalles:
Q Promesa de retraso
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 7/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
Promise.all en JavaScript: ¿Cómo obtener valor de resolución para todas las promesas?
¿Por qué es posible pasar un parámetro que no sea de función a Promise.then () sin
causar un error?
Promesas y desempeño
¿Devuelve un valor de una llamada de función antes de completar todas las operaciones
dentro de la función en sí?
javascript: ¿por qué hay una especificación para los módulos de sincronización y
asíncrono?
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 8/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
6 ¡Respuesta perfecta! Solo para agregar una nota al margen para los usuarios, esto no funcionará con
jQuery ver 1.4. - Trevor
1/04/11 a las 14:41
9 Esto ayudó mucho. Simplemente salté el paso var promise = testAjax() e hice esto
testAjax().success(function (data) { alert(data); }); : isurf porque
11/07/12 a las 19:55
var result="";
$.ajax({
url:"getvalue.php",
async: false,
success:function(data) {
result = data;
});
return result;
2 ¿Hay alguna forma de usar esta función con async: true? - vivex
14 de marzo de 2015 a las 8:45
dieciséis async: false ahora está en desuso en la especificación whatwg para la mayoría de los casos de
uso. Google Chrome ya advierte sobre esto en su consola cuando se produce una llamada con
async: false . La especificación w3c no parece haberla desaprobado todavía. - Frédéric
30/04/15 a las 19:45
¿Por qué no funciona esto? función get_cmd_info3 (cmd) {var result = null; $ .get ("bash /" + cmd,
function (data) {console.log (data); result = data}, 'json'); devolver resultado; } - David Okwii
20/04/2016 a las 14:27
esto no funcionó para mi ... ¡el resultado viene como indefinido en mi declaración de devolución!
- Avdhut Vaidya
11/08/2016 a las 8:22
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 9/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
0 ServiceUtil = ig.Class.extend({
base_url : 'someurl',
sendRequest: function(request)
dataGet = false;
$.ajax({
url: url,
async: false,
type: "get",
success: function(data){
ServiceUtil.objDataReturned = data;
});
return ServiceUtil.objDataReturned;
})
Entonces, la idea principal aquí es que, al agregar async: false, hace que todo espere hasta que
se recuperen los datos. Luego lo asigna a una variable estática de la clase, y todo funciona
mágicamente :)
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
});
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 10/11
20/8/2021 javascript - jQuery: devuelve datos después del éxito de la llamada ajax
https://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success 11/11