2016-03-28 21 views
1

私はAJAX submitフォームを持っています。jQuery Ajax POSTと返信データ

このフォームは機能していますが、機能が正しくないと感じています。

私は、たとえば、それは間違っているコードの多くを持っていると思う
jQuery(document).ready(function(){ 
    var myForm = $("#ajax_form"), email = $("#email"), emailInfo = $("#emailInfo"), ck1 = $("#ck1"), ck2 = $("#ck2"), ck3 = $("#ck3"); 
    jQuery('#ajax_form').submit(function(){ 
     var dados = jQuery(this).serialize(); 
     jQuery.ajax({ 
      type: "POST", 
      url: "check.php", // Checking data 
      data: dados, 
      beforeSend: function(){ 
       emailInfo.html("<font color='blue'>Checking..</font>"); 
       if(dados == "email=") // >>> This field, how to check if the field is blank? 
       { 
        email.focus(); 
        emailInfo.html("<font color='red'>Required.</font>"); 
        return false; 
       } 
      }, 
      success: function(data){ 
      if(data == "invalid") 
      { 
       emailInfo.html("<font color='red'>Invalid.</font>"); 
      } 
      else if(data != "0") 
      { 
       email.val(data); // This field, how to display the data sent in the email field? not the return of PHP, 
       ck1.css("display", "none"); 
       ck2.css("display", "inline"); 
      } 
      else 
      { 
       ck1.css("display", "none"); 
       ck2.css("display", "none"); 
       ck3.css("display", "inline"); 
      } 
     } 
     }); 

     return false; 
    }); 
}); 

if(dados == "email=") // >>> This field, how to check if the field is blank? 

と>>

email.val(data); // This field, how to display the data sent in the email field? not the return of PHP, 

私は更新しようとしたが、いずれかの結果に

を返しませんテストコード

    //if (email.val() == "") 
       //{ 
        //email.focus(); 
        alert(email.val()); // op1 
        alert(dados); // op2 
        alert($.trim($('email').val())); // op3 
        emailInfo.html("<font color='red'>Required.</font>"); 
        return false; 
       //} 

メールを挿入した場合、返す唯一のオプションは、私はあなたのコードは、フォームを送信する前に、AJAXによって電子メールを検証しようとしていると思いますOP2 [email protected]

+0

'if(dados ==" email = ")'なぜ余分な等号ですか?あなたが空白であるかどうかを調べたい場合は、 'if(dados ==" ")'または 'if($ var.val()== '')' –

+0

@ Fred-ii-はチェックしようとしていませんクエリ文字列が空白の場合あなたの2番目の提案はより良いものでした。 – 4castle

+0

@ 4castleコメント付きの '// >>>このフィールドは、フィールドが空白かどうかをチェックする方法を見ていましたか?空白/空白のままになっているかどうかを調べたいと言っている部分です。それが私がそれを書いた理由です。 –

答えて

0

です。もしそうなら、このコードはいくつかの点から私には大丈夫だと思われます。

return falseは、ファイアフォックスでは送信呼び出しの終了時に機能しない可能性があります。 e.preventDefault();を使用してください。投稿はthisをご覧ください。クロムでこのコードを試してみるとどこにもreturn trueが存在しません。

2番目のコードブロックはOKです。 email.val(data);$("#email").val(data);に等しい。私はあなたが結果に電子メールの入力値を設定しようとしていると思います。

if(dados == "email=")if (email.val() != '')に変更できます。だからダドも必要ありません。

myform変数はどこにも使用しません。削除する必要があります。

サーバー側の電子メールを検証することは、クライアント側で検証する必要はありません。

+1

'return false;'は常にjQueryで一貫して動作します。それは単純なJavaScriptで一貫して動作しません。それを心配する必要はありません。 Firefoxで何が起こっていたのかを知りたい場合は、[これを参照してください](http://stackoverflow.com/questions/5422770/returning-false-from-click-handler-doesnt-work-in-firefox)。 – 4castle

0

返されたdataの値は、PHPファイルからエコーされます。データを検証するには、2つの方法があります。

  1. フォームを送信する前にJSでフロントエンドで行います。
  2. PHPコードを別のファイルで実行してください。

    email.val(data); // This field, how to display the data 
            sent in the email field? not the return of PHP 
    

    私は、ユーザーが無効な要求を送信した場合値は削除されませんようにしたいことを推測しています(したがって、再びに値を入力する必要が)。

何ができることは、ユーザーが提出フォームに入力されたが、AJAXリクエストを送信する前にいるかの値を格納しますvar emailVal = email.val();

jQuery(document).ready(function(){ 
var myForm = $("#ajax_form"), email = $("#email"), emailInfo = $("#emailInfo"), ck1 = $("#ck1"), ck2 = $("#ck2"), ck3 = $("#ck3"); 
jQuery('#ajax_form').submit(function(){ 
    var dados = jQuery(this).serialize(); 

    var emailVal = email.val(); // Assign the entered input to an emailVal variable 

    jQuery.ajax({ 
     type: "POST", 
     url: "check.php", // Checking data 
     data: dados, 
     beforeSend: function(){ 
      emailInfo.html("<font color='blue'>Checking..</font>"); 
      if(dados == "email=") // >>> This field, how to check if the field is blank? 
      { 
       email.focus(); 
       emailInfo.html("<font color='red'>Required.</font>"); 
       return false; 
      } 
     }, 
     success: function(data){ 
     if(data == "invalid") 
     { 
      emailInfo.html("<font color='red'>Invalid.</font>"); 
     } 
     else if(data != "0") 
     { 

      email.val(emailVal); // Store the entered value back into the email input 

      ck1.css("display", "none"); 
      ck2.css("display", "inline"); 
     } 
     else 
     { 
      ck1.css("display", "none"); 
      ck2.css("display", "none"); 
      ck3.css("display", "inline"); 
     } 
    } 
    }); 

    return false; 
    }); 
}); 

別のノート

に私はなりまたこれを指摘したいと思います:if(data == "invalid")

私は、PHPがエラーメッセージを返すことができることを発見しましたあなたがそれを返すように頼むものと一緒にdataの中で。あなたのPHPコードに何らかのエラーがある場合、invalidは返されたdataの値の中で唯一の文字列になることは決してないので、決してヒットしません。

  1. 戻りHTTPエラーをし、AJAX機能のerrorコールバック内でエラー処理を実行します:自分自身を守るために、私はどちらかの2つのことを行うだろうhttps://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
  2. 戻りユニークワードと返さ内でその単語を検索しますデータ列:

PHP

if(!validEmailCheck($email)){ 
    echo('invalidRAWR'); 
} 

JS

if(data.indexOf('invalidRAWR') != -1) // Built in PHP errors will never return 'invalidRAWR'