0

フォーム送信を介して AJAX 呼び出しを試みています

形:

<form action="subscribe.php" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
    <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL" placeholder="Enter Email">
    <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
    <p class="error"></p>
</form>

ジャバスクリプト:

   var $form = $('#mc-embedded-subscribe-form'),
        timer;

    if($form.length > 0) {
        $('#mc-embedded-subscribe').on('click', function(e){
            var hasError = false,
                emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/,
                email = $("input.email").val(),
                error = $('.error');

            error.is(':visible') ? error.fadeOut("slow", checkEmail) : checkEmail();

            function checkEmail() {
                if (email == "") {
                    error.text('Enter an email').fadeIn();
                    $("#mce-EMAIL").focus();
                    hasError = true;
                } else if(!emailReg.test(email)) {
                    $("#mce-EMAIL").focus();
                    error.text('Enter a valid email').fadeIn();
                    hasError = true;
                }
            }

            if(hasError == true) { return false; }

            $.ajax({
                url: $form.attr('action'),
                type: 'post',
                data: {
                    email: $('#mce-EMAIL').val()
                },
                success: function(data) {
                    if(data === '1') {
                        console.log(data);
                        console.log('success');
                        launchSubscriptionPopup();
                    } else {
                        error.text('There was an error');
                    }
                },
                error: function(data) {
                    console.log(data);
                }
            });
            e.preventDefault();
        });
    }

subscribe.php

サブスクライブ.PHP:

$email = $_REQUEST['email'];

if(filter_var($email, FILTER_VALIDATE_EMAIL)) {

    // $insertdate = date("Y-m-d H:i:s");
    // $db = db_connect();
    // $query = $db->query("INSERT INTO newsletter_coupon_codes VALUES ('$insertdate', '$email', '1')");

    echo 1;

}

die();

デシベル接続():

function db_connect() {
    include('/home/includes/dbconnect.php'); // holds the blow variables
    @ $db = new mysqli($dbhost, $dbuser, $dbpw, $dbname);
    if (!$db) {
        throw new Exception('Could not connect to database server');
    } 
    else {
        $db->autocommit(TRUE);
        return $db;
    }
}

これはすべて正常に機能します。AJAX 呼び出しが行われsubscribe.php、AJAX 呼び出しに 1 が返されます。

ここで、電子メールと日付をデータベースに記録したいと思います。の 2 つの DB 行のコメントをsubscribe.php外すと、AJAX 呼び出しが失敗します。何も返されません。DB エントリが作成されますが、1 が返されないため、JavaScript 呼び出しを続行できません。

subscribe.phpスタンドアロンを表示すると、それも機能します。問題ありません。DB エントリを追加し、1.

subscribe.phpこれに DB レイヤーを追加すると、AJAX リクエストに値 1 が返されない理由はありますか?

4

2 に答える 2

1

おそらく、あなたは彼らの外に空白を持っています

あとはトリミングするだけ

 if($.trim(data) === '1')

そしてこれはうまくいくはずです

于 2013-10-31T08:54:22.557 に答える
0

どこでも "" を使用しているため、クエリは無効です

$query = $db->query("INSERT INTO newsletter_coupon_codes VALUES ('" . date("Y-m-d H:i:s") . "', '" . $email . "', '1')");

になる

INSERT INTO newsletter_coupon_codes VALUES ('Y-m-d H:i:s'

失敗トラップがないため、サイレントに失敗し、ajax が空白を返しているので、error_log を確認すると、そこにエラーが表示されます。

代わりに、ユーザー入力ではないため、mysql の日付挿入として日付を入力します。

$query = $db->query("INSERT INTO newsletter_coupon_codes VALUES ('NOW()', '$email', '1')");

または、クエリの外で日付を準備します

$insertdate = date("Y-m-d H:i:s");
$query = $db->query("INSERT INTO newsletter_coupon_codes VALUES ('$insertdate', '$email', '1')");
于 2013-10-31T08:35:52.383 に答える