mySQLi打破了AJAX请求?

时间:2013-10-31 08:28:49

标签: php jquery ajax database mysqli

我正在尝试通过表单提交进行AJAX调用

FORM:

<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

SUBSCRIBE.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;
    }
}

所有这一切都很好。对subscribe.php进行AJAX调用,并将1返回给AJAX调用。

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

如果我查看subscribe.php单机版,它也可以正常工作。它添加了数据库条目和回声1

有没有理由为此添加数据库层会导致subscribe.php不将值1返回给我的AJAX请求?

2 个答案:

答案 0 :(得分:1)

可能你的白色空间

然后只做修剪

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

这应该有效

答案 1 :(得分: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')");