Saltar al contenido

jquery: valor de retorno usando el resultado de ajax en caso de éxito

Siéntete en la libertad de compartir nuestro sitio y códigos con tus amigos, ayúdanos a ampliar nuestra comunidad.

Solución:

El problema es que no puede devolver un valor de una llamada asincrónica, como una solicitud AJAX, y esperar que funcione.

El motivo es que el código que espera la respuesta ya se ha ejecutado en el momento en que se recibe la respuesta.

La solución a este problema es ejecutar el código necesario en el interior los success: llamar de vuelta. De esa manera está accediendo a la data sólo cuando está disponible.

function isSession(selector) 
    $.ajax(
        type: "POST",
        url: '/order.html',
        data: ( issession : 1, selector: selector ),
        dataType: "html",
        success: function(data) 
            // Run the code here that needs
            //    to access the data returned
            return data;
        ,
        error: function() 
            alert('Error occured');
        
    );

Otra posibilidad (que es efectivamente lo mismo) es llamar a una función dentro de su success: devolución de llamada que pasa los datos cuando están disponibles.

function isSession(selector) 
    $.ajax(
        type: "POST",
        url: '/order.html',
        data: ( issession : 1, selector: selector ),
        dataType: "html",
        success: function(data) 
                // Call this function on success
            someFunction( data );
            return data;
        ,
        error: function() 
            alert('Error occured');
        
    );


function someFunction( data ) 
    // Do something with your data

Hay muchas formas de obtener la respuesta de jQuery AJAX. Estoy compartiendo con ustedes dos enfoques comunes:

Primero:

utilizar asíncrono=false y dentro de la función devuelve ajax-object y luego obtiene la respuesta ajax-object.responseText

/**
 * jQuery ajax method with async = false, to return response
 * @param  mix  selector - your selector
 * @return mix           - your ajax response/error
 */
function isSession(selector) 
    return $.ajax(
        type: "POST",
        url: '/order.html',
        data: 
            issession: 1,
            selector: selector
        ,
        dataType: "html",
        async: !1,
        error: function() 
            alert("Error occured")
        
    );

// global param
var selector = !0;
// get return ajax object
var ajaxObj = isSession(selector);
// store ajax response in var
var ajaxResponse = ajaxObj.responseText;
// check ajax response
console.log(ajaxResponse);
// your ajax callback function for success
ajaxObj.success(function(response) 
    alert(response);
);

Segundo:

utilizar $.extender
método y hacer una nueva función como ajax

/**
 * xResponse function
 *
 * xResponse method is made to return jQuery ajax response
 * 
 * @param  string url   [your url or file]
 * @param  object your ajax param
 * @return mix       [ajax response]
 */
$.extend(
    xResponse: function(url, data) 
        // local var
        var theResponse = null;
        // jQuery ajax
        $.ajax(
            url: url,
            type: 'POST',
            data: data,
            dataType: "html",
            async: false,
            success: function(respText) 
                theResponse = respText;
            
        );
        // Return the response text
        return theResponse;
    
);

// set ajax response in var
var xData = $.xResponse('temp.html', issession: 1,selector: true);

// see response in console
console.log(xData);

puedes hacerlo tan grande como quieras…

Vi las respuestas aquí y, aunque útiles, no eran exactamente lo que quería, ya que tuve que modificar gran parte de mi código.

Lo que funcionó para mí, fue hacer algo como esto:

function isSession(selector) 
    //line added for the var that will have the result
    var result = false;
    $.ajax(
        type: "POST",
        url: '/order.html',
        data: ( issession : 1, selector: selector ),
        dataType: "html",
        //line added to get ajax response in sync
        async: false,
        success: function(data) 
            //line added to save ajax response in var result
            result = data;
        ,
        error: function() 
            alert('Error occured');
        
    );
    //line added to return ajax response
    return result;

la esperanza ayuda a alguien

Anakin

Sección de Reseñas y Valoraciones

Finalizando este artículo puedes encontrar las interpretaciones de otros creadores, tú además tienes la opción de dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *