0

以下のコードに問題があります。メールが既に存在する場合にエラー メッセージを表示しようとしていますが、成功していません。コードを見てください。

jQuery の Ajax:

<script type="text/javascript">  

    // Centering the text content
    jQuery(window).resize(function () {
        boxHeight();
    }).load(function() {
        boxHeight();
        // Show the content and focus the email input
        $("#content").fadeIn();
        $("#email").focus();


    });

    jQuery(document).ready(function($){
        $('#subscribe').submit(function(e){
            e.preventDefault();

            email = $('input#email');           
            email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;           
            if(!email_regex.test(email.val())) {
                $('#response', form).fadeIn(500, function() {
                    $('#response', form).html('<p class="message warning" align="center">Invalid email</p>');
                });
                return;
            } else {
                $('#response', form).html('<p class="message">Please Wait...</p>');
            }

            var form = $(this);
            var post_url = form.attr('action');
            var post_data = form.serialize();               
            $.ajax({
                type: 'POST',
                url: post_url,
                data: post_data,
                success: function(responseText) {  if(responseText == 1) {
                    $('#response', form).html('<p class="message">Error...</p>');
                } else { if(responseText == "") {                       
                    $(form).fadeOut(500, function(){
                        form.html(msg).fadeIn();
                    });

                }
                }
            }
            });
        });
    });
</script>

PHP データベース接続:

    <?php    
$host="xxxx"; // Host name
$username="xxxx"; // Mysql username
$password="xxxx"; // Mysql password
$db_name="xxxx"; // Database name
$tbl_name="xxxx"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Get values from form
$email = $_POST['email'];

$query = mysql_query("SELECT email FROM banco_emails WHERE 'email' = '$email'");
    if(mysql_num_rows($query) == 1) { // if return 1, email exist.
    echo '1';
    } else {
// Insert data into mysql
$sql="INSERT INTO $tbl_name(email) VALUES ('". $email . "')";
$result=mysql_query($sql);
echo '<p class="message">Thanks for registering. Our bar is getting crowded!</p>';

問題は、ajax コードにエラー メッセージが表示されず、「お待ちください...」というメッセージだけが表示され、何も起こらないことです。理由はわかりません...

私の悪い英語でごめんなさい。

ありがとうございます!


問題は解決しました。問題はphpコードにありました。私はそれを実行しましたが、うまくいきました!

    $query = mysql_query("SELECT email FROM banco_emails WHERE email = '$email' LIMIT 1");

    $email_check = mysql_num_rows($query);
     if ($email_check > 0) {
    echo '1';
    } else if ($email_check == 0) {
// Insert data into mysql
$sql="INSERT INTO $tbl_name(email) VALUES ('". $email . "')";
$result=mysql_query($sql);
echo '<p class="message">Thanks for registering. Our bar is getting crowded!</p>';
4

2 に答える 2

1

あなたの成功関数では、成功時に PHP が返すものを誤って処理しています。メールが新規でデータベースに追加された場合、PHP は次のようにエコーします。

<p class="message">Thanks for registering. Our bar is getting crowded!</p>

JS は次のように応答を解析します。

if(responseText == 1) {
    $('#response', form).html('<p class="message">Error...</p>');
} else {
   if(responseText == "") {                       
       $(form).fadeOut(500, function(){
          form.html(msg).fadeIn();
       });
   }
}

ここでの問題は、responseText が空の文字列の場合にのみ HTML メッセージを表示することです。if ステートメントを取り除く必要があります。

if(responseText == 1) {
    $('#response', form).html('<p class="message">Error...</p>');
} else {                       
   $(form).fadeOut(500, function(){
      form.html(msg).fadeIn();
   });
}

このようにresponseText表示されます。また、送信 HTML がどのように見えるかは 100% わかりませんが、メッセージを表示した後、フォームを非表示にしてもまだ表示される場合は、「しばらくお待ちください」をフェードアウトすることをお勧めします。

于 2012-10-20T23:13:10.717 に答える
0

このようにしてみてください:

独自のメール列を作成します。メールアドレスがすでに存在する場合はエラーが返され、ajaxエラーセクションでユーザーにエラーメッセージを表示できます。

于 2012-10-20T22:35:45.323 に答える