从Ajax和jQuery中的匿名函数传递数据的问题

时间:2011-07-26 15:25:03

标签: jquery ajax anonymous

我需要在发送表单之前验证用户和密码。为此,我使用jQuery和Ajax。但是我在将'estado'值传递到匿名函数之外时遇到了问题。

这是代码:

function tx_oriconvocatorias_pi1_validarFormPost(){
    var x=document.forms["form_postulante"]["pass_un"];
    if (x.value==null || x.value==""){
        alert("Por favor ingrese su contraseña.");
        return false;
    }
    var $j = jQuery.noConflict();
    var cun = $j('#correo_un').val();
    var pun = $j('#pass_un').val();
    var estado = null;
    $j.ajax({
        type: 'POST',
        data: 'eID=ori_convocatorias_formPost&correo_un='+cun+'&pass_un='+pun,
        success: function(datos){
            if(datos!=1){
                alert ("La contraseña ingresada no es válida"); 
            }
            estado = datos;
            alert(estado);
        },
    });
    alert(estado);
    if (estado!=1){
        return false;
    }
}

我注意到第一个alert(estado)(外部)返回null,然后第二个alert(estado)(内部)返回'datos',因此代码中的最后一个alert(estado)被执行首先,我的函数总是返回false

我不知道如何在执行Ajax代码之后评估'estado',而不是之前。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你做不到。您正在执行异步请求,因此您的函数在返回ajax调用的结果之前结束。 您可以强制呼叫为同步:

$j.ajax({
        type: 'POST',
        data: 'eID=ori_convocatorias_formPost&correo_un='+cun+'&pass_un='+pun,
        async: false,//here you are synchrone
        success: function(datos){

或者您可以返回false,并手动提交表单。

答案 1 :(得分:1)

第一个alert(estado)为空且第二个alert(estado)为'datos'的原因是因为ajax是异步的。这意味着即使您正在调用$ j.ajax,代码仍然会通过并评估函数的其余部分。

我认为这可能是您正在寻找的更多内容:

function tx_oriconvocatorias_pi1_validarFormPost(){
    var x=document.forms["form_postulante"]["pass_un"];
    if (x.value==null || x.value==""){
        alert("Por favor ingrese su contraseña.");
        return false;
    }
    var $j = jQuery.noConflict();
    var cun = $j('#correo_un').val();
    var pun = $j('#pass_un').val();
    var estado = null;
    $j.ajax({
        type: 'POST',
        data: 'eID=ori_convocatorias_formPost&correo_un='+cun+'&pass_un='+pun,
        success: function(datos){
            if(datos!=1){
                alert ("La contraseña ingresada no es válida"); 
            }
            estado = datos;
            alert(estado);
        },
        error: function(datos) {
            return false;
       }
    });
}

答案 2 :(得分:1)

您必须使用同步调用才能实现此目的。但是对于同步的ajax调用,浏览器不会响应,直到响应出现时请记住这一点。