2011-06-23 4 views
3

私はこの件に関して約20以上の投稿を見たことがありますが、私には分かりません。値をチェックするajax success関数の中からフォームを送信

これはかなり簡単なシナリオです。私はフォームを提出すると、電子メールが別のユーザーによって既に取得されていないかどうかを確認するためにajax呼び出しを行います。撮影されていない場合は、フォームを提出したい場合は、フォームを提出しないでください。

ここでHTML

<form id='greatForm' action='godothat.php' method='post'> 
<input type='submit' id='email'> 
<button>Send</button> 
</form> 

任意の助けのためのJS

$('#greatForm').submit(function(){ 


     // GET THE VARS 
     var email = $('#email').val(); 


     $.ajax({ 
      data: { 'field1' : email }, 
      type: 'GET', 
      dataType: 'json', 
      url: 'url.php', 
      beforeSend : function(){ }, 
      success: function(answer){ 
       if(answer.error === false){ 
         // Submit this form without doing the ajax call again 
       } 
       if(answer.error === true){ 
        // Not ok, don't submit this form 
       } 
      } 
     });        

     return false; 
    }); 

おかげです。

**更新** 多分私は正しいとは言いませんでした。私が意味するのは、 "answer.error === false"がtrueで、submit関数がtrueを返す必要がある場合です。より多くの意味を作る

だから、AJAXの完全な

、answer.errorがfalseの場合、真とその逆であるべき提出...

していますか?

+0

にあなたは別のAJAXせずにもう一度フォームを送信することはできませんコール。これはサーバー側で処理する必要があります。 – Dogbert

+0

@Dogbert - >私はアップデートを追加しました。基本的には、answer.dataがfalseの場合、submitがtrueを返すようにします。それを得るために私は何をすべきですか? – denislexic

答えて

6
$('#greatForm').submit(function(){ 
    if(!$(this).attr('validated')) 
    { 
    // GET THE VARS 
    var email = $('#email').val(); 


     $.ajax({ 
     data: { 'field1' : email }, 
     type: 'GET', 
     dataType: 'json', 
     url: 'url.php', 
     beforeSend : function(){ }, 
     success: function(answer){ 
      if(answer.error === false){ 
        $('#greatForm').attr('validated',true); 
        $('#greatForm').submit(); 
      } 
      if(answer.error === true){ 
       //display the errors 
      } 
     } 
    }); 
    return false; 
    }        
    return true; 
}); 

これは、既に検証されている場合は、フォームに検証されたプロパティを追加するだけです。 また、属性が事前に設定されていない場合にのみ、フォームを検証します。

5

てみもう一度フォームを送信する前に「送信」イベントハンドラを削除するには:

if(answer.error === false){ 
    // Submit this form without doing the ajax call again 
    $('#greatForm').unbind().submit(); 
} 
1

技術的には、あなたはそれだけでtrueを返すことで「提出」することができます。ブラウザは通常のフォーム送信手順を完了します。しかし、AJAXでやりたければ、別のAJAX呼び出しをしてフォームを送信する必要があります。各リクエストはそれ自身のエンティティです。それはあなたのために接続を開いたままにしていません。

ただし、@Dogbertは正しいです。このタイプのものは、フォームデータがそこで処理されると、サーバー側で実行する必要があります。 AJAXでそれを行う場合でも、返されたレスポンスを使用してユーザーにエラーを通知することはできますが、必要な修正を行った後で再度フォームを送信する必要があります。

+0

>それは基本的に私がしたいことです。 answer.dataがfalseの場合はtrueを返し、falseの場合はtrueを返します。どうやってやるの? – denislexic

+1

私は混乱がどこにあるのでしょうか。典型的なプロセスは、フォームをAJAX経由でサーバーに送信することです。サーバーが検証し、それが正常であれば、それをデータベースなどに挿入します。次に、クライアントに何が起こったかを示す応答を返します。成功かエラーかを示します。それが成功すれば。新しいビューをユーザーに提示し、それを1日と呼びます。エラーの場合は、ユーザーに通知して1日と呼びます。その後、ユーザーは修正されたデータで新しい提出を開始します。 –

+0

>結果に応じてtrueを返す解決策はありません。右?助けてくれてありがとう。 – denislexic

1

私が正しく理解している場合、あなたはあなたのphp.url 例からエコーtreu /偽を必要とする:

$.ajax({ 

    type: 'POST', 
    url: 'url.php', 
    data: $("#your_form").serialize(), 
    success: function(data) { 
    if (data=='true') {       
     ... 
    } else { 

とurl.php

echo "true"; 
echo "false"; 
関連する問題