防止重复条目 - Ajax不返回错误。 PHP MySQL jQuery

时间:2011-06-05 19:13:26

标签: php javascript jquery mysql

我正在尝试阻止我的数据库中的重复提交以获取简报提交表单。我成功阻止了重复的条目,但是我无法修改我的jQuery来打印错误。我已经包含了PHP,只是因为我错过了一些东西......任何帮助都将不胜感激!

jQuery的:

submitHandler: function(form) {
        jQuery(form).ajaxSubmit({
            success: function() {
                $('#newsletterForm').html("<div id='success-message'></div>");
                $('#success-message').html("<p><strong>Thank you.</strong> <br/>You've been added to our list and will hear from us soon!</p>");
            },
            error: function() {
                $('#newsletterForm').html("<div id='success-message'></div>");
                $('#success-message').html("<p><strong>That email already exists.</strong> <br/>Please enter another email address.</p>");
            }
        });
    }

PHP:

if(isset($_POST['submit'])) {  

if(trim($_POST['email']) == '')  {  
    $hasError = true;  
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {  
    $hasError = true;  
} else {  
    $email = trim($_POST['email']);  
}  

if(!isset($hasError)) {  
    $con = mysql_connect("xxx.xxx.xxx.xxx","user","pass");
        if (!$con)
            {
                die('Could not connect: ' . mysql_error());
            }

    mysql_select_db("myDB", $con);

    $query = "SELECT COUNT(id) AS mycount FROM newsletter WHERE email = '$email'";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    if($row['mycount'] == 0) {
        $query = "INSERT INTO newsletter (email,dt) VALUES ('$email',NOW())";
        mysql_query($query) or die ("Error writing to database");
    } else {
         echo "I'm sorry our database already contains that email address. Please use a new email address to continue.";
    }

    if (!mysql_query($sql,$con))
         {
            die('Error: ' . mysql_error());
         }
    mysql_close($con);  
}  
}  

2 个答案:

答案 0 :(得分:1)

只有在您的AJAX请求失败时才会调用错误(例如404)。

success: function() { }内,您需要确定您的PHP脚本返回的是成功消息还是错误消息。最简单的方法是使用JSON而不是纯文本。

要做到这一点,在PHP中而不是回显字符串,请执行..

echo json_encode(array('result'=>'success','response'=>'Everything worked');

或..

echo json_encode(array('result'=>'error','response'=>'Already exists');

然后在你的ajax中,将dataType设置为'json',然后在你的success函数中,你可以访问JSON作为对象。

答案 1 :(得分:0)

为什么不能只打印出发生了什么的JSON表示,而不是回显消息?这将允许您直接在JavaScript中操作对象。

请记住:jQuery不是一种语言。