试图将数据发送到mysql,收到回调问题


Trying to send data to mysql, receiving callback issue

这是一个邮件列表脚本。它在没有jquery的情况下可以自己工作,但我正在尝试调整它以使用ajax。然而,没有成功。当$.sql部分被注释掉时,它会成功地返回url字符串中的变量。然而,当我取消注释js文件的这一部分并将PHP引入其中时,它只需刷新页面,电子邮件地址仍在输入框中。PHP本身就可以工作,所以我不知道哪里出了问题。这是我的。。。任何帮助都将不胜感激。

形式:

<form name="email_list" action="" id="maillist_form">
<p><strong>Your Email Address:</strong><br/>
<input type="text" name="email" id="email" size="40">
<input type="hidden" name="sub" id="sub" value="sub">
<p><input type="submit" value="Submit Form" class="email_submit"></p>
</form>

JQuery:

$(function() {    
$('#maillist_form').submit(function() { 
    var email = $("input#email").val();  
                if (name == "") { 
                $("input#email").focus();  
                return false;
            }  
    var sub = $("input#sub").val();  
                if (name == "") {  
                $("input#sub").focus();  
                return false;
            }       
    var dataString = $("#maillist_form").serialize();
    //alert (dataString);return false;  
    $.ajax({  
        type: "POST",  
        url: "mailing_list_add2.php",  
        data: dataString,  
        success: function() {  
            $('#display_block')                      
            .hide()  
            .fadeIn(2500, function() {  
                $('#display_block');  
            }); 
        }  
    }); 
    return false; 
});
});

PHP:

<?php
// connects the database access information this file
include("mailing_list_include.php");
// the following code relates to mailing list signups only
if (($_POST) && ($_POST["sub"] == "sub")) {
if ($_POST["email"] == "") {
        header("Location: mailing_list_add2.php");
        exit;
    } else {
        // connect to database
        doDB();
        // filtering out anything that isn't an email address
        if ( filter_var(($_POST["email"]), FILTER_VALIDATE_EMAIL)  == TRUE) {
            echo '';
        } else {
            echo 'Invalid Email Address';
            exit;
        }
        // check that the email is in the database
        emailChecker($_POST["email"]);
        // get number of results and do action
        if (mysqli_num_rows($check_res) < 1) {
            // free result
            mysqli_free_result($check_res); 
            // cleans all input variables at once
            $email = mysqli_real_escape_string($mysqli, $_POST['email']);
            // add record
            $add_sql =  "INSERT INTO subscribers (email) VALUES('$email')";
            $add_res =  mysqli_query($mysqli, $add_sql)
                        or die(mysqli_error($mysqli));
            $display_block = "<p>Thanks for signing up!</p>";
            // close connection to mysql
            mysqli_close($mysqli);
        } else {
            // print failure message
            $display_block = "You're email address - ".$_POST["email"]." - is already subscribed.";
    }
}
}
?>

我不会把include代码放在这里,因为我认为它是正确的——除非引入jquery意味着这也需要调整。

您的AJAX没有捕捉到结果:

$.ajax({  
    type: "POST",  
    url: "mailing_list_add2.php",  
    data: dataString,  
    success: function(response) {  
        $('#display_block')                      
        .hide()  
        .fadeIn(2500, function() {  
            $('#display_block').html(response);   //just an example method. 
       //Are you sure the selector is the same? 
       //Can also be $(this).html(response);
    }  
}); 

正如gdoron所指出的,没有"name"变量。也许你的意思分别是"电子邮件"answers"sub"?

PHP的响应也不会得到响应。刚放:

echo $display_block;

您不从服务器回显数据,也不尝试在成功回调中获取数据,并且fadeIn回调只有一个选择器

您检查了错误的变量:

var email = $("input#email").val();  
            if (name == "") {  // Didn't you mean email?
            $("input#email").focus();  
            return false;
        }  
var sub = $("input#sub").val();  
            if (name == "") {  // Didn't you mean sub?
            $("input#sub").focus();  
            return false;
        } 

它怎么能工作