2011-07-26 39 views
0

フォームを送信する前に、ユーザーとパスワードを検証する必要があります。そのためには、jQueryとAjaxを使用します。しかし、私は'estado'の値を無名関数の外に渡す際に問題があります。AjaxとjQueryの匿名関数からデータを渡す際の問題

これはコードである:

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; 
    } 
} 

Iが最初にalert(estado)(外側)nullを返し、その後、(内部)alert(estado)'datos'を返すので、コードの最後alert(estado)は、第1および常に実行されることに気付きます私の関数はfalseを返します。

'estado'の評価方法はわかりませんが、Ajaxコードを実行した後ではありません。

ご協力いただきありがとうございます。

答えて

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を返し、手動でフォームを送信することができます あなたはsynchronusするコールを強制することができます。

+0

ありがとうございます、これで、私の期待通りに機能します。 – Memochipan

1

最初のalert(estado)がヌルで、2番目の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; 
     } 
    }); 
} 
+0

あなたが書いたコードは、私が必要とするものではありませんが、同期を使用する必要がある場合は私が非同期で使用していたことが正しいと思います。 – Memochipan

1

。しかし、同期AJAX呼び出しでは、応答が来るまでブラウザは応答しません。

+0

コメントをいただきありがとうございます。この関数は、フォームが送信される前にデータベースに対してフォームを検証するために使用されるため、この遅延に問題はありません。 – Memochipan

関連する問題