0

Hola tengo la siguiente funcion de jquery

  (function ($) { 
$.onlyData = function (id) {
        var respuesta;
        var datos =$(id).data("sql");
        datos=datos.split("-")
        var campoBD = datos[0];
        var tableModel = datos[1];
        var arr = $(id).val();
        var parametros = {
            "Field": {
                "Data": arr
            }
        };
        $.ajax({
            data: parametros,
            url: '/Desarrollo/consultar_existencia/' + campoBD + "/" + tableModel,
            type: 'post',
            dataType: "json",
            success: function (response) {
                console.log(response);
                respuesta=(response);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log(jqXHR);
            }
        });

        return "chap"+respuesta;
    }
})(jQuery);

Y cuando le doy click a un boton

entra aqui:

var unico = 0;
        alert($.onlyData("#" + $(".txtEmail").attr("id")));

pero el alert llega así: introducir la descripción de la imagen aquí

y necesito la respuesta del ajax para una validacion y la cosa es que el console si muestra bn el response: introducir la descripción de la imagen aquí

Andrés Vélez
  • 579
  • 1
  • 7
  • 25
  • 1
    Necesitas un callback. Conteste una respuesta similar aqui: https://es.stackoverflow.com/questions/169297/reutilizar-ajax/169300#169300 – alanfcm Jun 20 '18 at 15:39
  • @alanfcm no funciono, siempre se queda con los mismo datos – Andrés Vélez Jun 20 '18 at 16:07
  • el problema es el asincronismo que tienes al ejecutar la funcion , este tipo de errores las funciones no esperan resultados debes trabajar con promesas ,que esta en el enlace que te dio @alanfcm – JackNavaRow Jun 20 '18 at 16:24

1 Answers1

0

Entiendo que tienes el valor de la respuesta al momento de imprimir el console log, pero no al momento de retornar la variable respuesta.

Esto se debe que ajax es asíncrono y al momento de hacer el return tu función ajax aún no se ha resuelto.

Para capturar la respuesta de un ajax te sugiero que dentro de tu función Success, después de obtener una respuesta introduzcas tu función de validación, Ej:

success: function (response) {
    console.log(response);
    respuesta=(response);
    runMyValidations(response);
},

Como sugerencia alternativa (y que considero de mala práctica), puedes acomodar el valor de tu response en un elemento HTML y después tomar de ahí mismo.

EJ:

success: function (response) {
    $('#responseValue').html(response);
},

Posteriormente consultas el valor

var myResponse = $('#responseValue').html();

Hay una tercer alternativa: puedes utilizar la propiedad async:false, el cual detiene la ejecución del código hasta que tu ajax responda.

introducir la descripción de la imagen aquí

Espero te sirva de algo, Saludos.