Usando $ .post dentro de una función javascript, ¿no se puede asignar valor a una variable?

StackOverflow https://stackoverflow.com/questions/824431

  •  05-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de usar $ .post dentro de una función, obtener los resultados y luego devolver la función verdadero o falso según los resultados de la devolución de llamada de $ .post. Sin embargo, la devolución de llamada parece ocurrir, DESPUÉS del evento de retorno de la función principal.

Aquí está el código actual, la variable ret siempre está indefinida, pero si la alerta () dentro de la devolución de llamada $ .post, devuelve el resultado correcto;

function elementExists(key, type, path, appid, pid){
    var ret;
    $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
        ret = data;                         
    });

    alert(ret);
    return ret;

}
¿Fue útil?

Solución

Como has descubierto, la publicación se realiza de forma asíncrona. Si desea que sea sincrónico, deberá usar ajax y establece el parámetro async en falso. Sin embargo, sería mejor reconocer que la publicación es asíncrona y construir su código para que la acción realizada por la devolución de llamada sea independiente del método que invoca la publicación. Obviamente, realmente quieres hacer algo más que la alerta, pero sin saber qué es difícil aconsejarte cómo refactorizar esto.

EDIT : entiendo que su código está verificando si existe algo, pero lo está verificando con un propósito. Si supiéramos cuál era el propósito, entonces sería posible recomendar cómo lograrlo en la devolución de llamada para que el método pueda ser refactorizado.

Otros consejos

function elementExists(key, type, path, appid, pid){
        $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
           alert(data);
        });
  }

la función (datos) es una devolución de llamada (asíncrona), no puede devolver valores como esos.

es que no se llama a la devolución de llamada hasta que se termina de llamar a la página, pero su " return ret " se ejecuta inmediatamente después de llamar a $ .post

Si desea configurarlo sincronizado, establezca async: false

ver los documentos http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype

El problema es que su código se ejecuta de forma asíncrona. Eso es alerta (ret) se llama antes que ret = data, lo que sucede cuando se completa la solicitud Ajax.

Puede hacer que sus llamadas ajax sean sincrónicas (no recomendadas) usando async opción, o rediseñar su código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top