sincronas funciones funcion ejemplos javascript ajax jquery

funciones - Función de JavaScript que devuelve datos de llamada AJAX



jquery (6)

Esta pregunta ya tiene una respuesta aquí:

Me gustaría crear una función de JavaScript que devuelva el valor de una llamada jQuery AJAX. Me gustaría algo como esto.

function checkUserIdExists(userid){ return $.ajax({ url: ''theurl'', type: ''GET'', cache: false, data: { userid: userid }, success: function(data){ return data; } }); }

Sé que puedo hacer esto configurando async en falso, pero preferiría no hacerlo.


A partir de jQuery 1.8, la devolución de llamada "éxito", "error" y "completa" están en desuso. En su lugar, debe utilizar "hecho", "fallar" y "siempre".

Para que pudieras tener:

function checkUserIdExists(userid, callback) { return $.ajax({ url: ''theurl'', type: ''GET'', cache: false, data: { userid: userid } }) .done(callback) .fail(function(jqXHR, textStatus, errorThrown) { // Handle error }); } checkUserIdExists(2, function(data) { console.log(data); // Do what you want with the data returned });


Con jQuery 1.5, puede usar la nueva característica $.Deferred , que está destinada exactamente para esto.

// Assign handlers immediately after making the request, // and remember the jqxhr object for this request var jqxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) .complete(function() { alert("complete"); }); // perform other work here ... // Set another completion function for the request above jqxhr.complete(function(){ alert("second complete"); });

Source


No es así como la programación asíncrona de JavaScript estaba destinada a realizarse. En su lugar, use una devolución de llamada en su función de éxito para llamar a otra función para usar sus datos devueltos desde el servidor.


No puede devolver los datos devueltos por una llamada AJAX a menos que desee hacerlo de forma sincrónica (y no confíe en mí). Pero lo que puede devolver es la promesa de una información devuelta por una llamada AJAX y puede hacerlo de una manera muy elegante.

( ACTUALIZACIÓN: tenga en cuenta que actualmente jQuery Promises no es compatible con la especificación Promises / A + ; más información en esta respuesta ).

Básicamente, puede devolver el valor de retorno de su llamada $ .ajax (...):

function checkUserIdExists(userid){ return $.ajax({ url: ''theurl'', type: ''GET'', cache: false, data: { userid: userid } }); }

y alguien que llame a tu función puede usarlo así:

checkUserIdExists(userid).success(function (data) { // do something with data });

Vea esta publicación mía para una mejor explicación y demostraciones si está interesado.


Tim, los dos escenarios son mutuamente excluyentes; una operación asíncrona no servirá para ningún propósito ni podrá recuperar los datos devueltos.

Debería mirar una infraestructura habilitada para eventos para sus llamadas ajax


puede pasar en una función de devolución de llamada:

function checkUserIdExists(userid, callback) { $.ajax({ ... success: callback }); } checkUserIdExists(4, function(data) { });