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>

JAVASCRIPT:

   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();

db_connect():

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并将 1 返回给 AJAX 调用。

现在我想将电子邮件和日期记录到数据库中。如果我取消注释 中的两个 DB 行subscribe.php,AJAX 调用将失败。什么都没有返回。创建了数据库条目,但没有返回 1,因此我无法继续进行 JavaScript 调用。

如果我查看subscribe.php单机版,它也可以,很好。它添加 DB 条目并回显一个1.

是否有任何理由将数据库层添加到此会导致subscribe.php不将值 1 返回到我的 AJAX 请求?

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 回答