【问题标题】:Problem with passing data from anonymous function in Ajax and jQuery从 Ajax 和 jQuery 中的匿名函数传递数据的问题
【发布时间】:2011-07-26 15:25:03
【问题描述】:

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

这是代码:

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)首先执行并且我的函数总是返回@987654327 @。

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

提前感谢您的帮助。

【问题讨论】:

    标签: jquery ajax anonymous


    【解决方案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,然后手动提交表单。

    【讨论】:

      【解决方案2】:

      第一个alert(estado) 为null 而第二个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;
             }
          });
      }
      

      【讨论】:

      • 谢谢,你写的代码不是我需要的,但你说得对,当我必须使用同步时,我使用的是异步。
      【解决方案3】:

      您必须使用同步调用才能实现这一点。但是对于同步 ajax 调用,浏览器在响应到来之前不会响应,请记住这一点。

      【讨论】:

      • 感谢您的评论,我对这种延迟没有意见,因为该函数用于在发送表单之前针对数据库验证表单。
      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 2023-03-23
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多