0

我正在编写动态联系表格。代码如下所示:
jQuery:

$.ajax({
    type: "POST",
    url: "sendmail.php",
    data: {email: email, message: message, captcha: captcha}
})
.done(function( result ) {
    alert(result);
})

PHP:

<?php
    session_start();
    $email = $_POST['email'];
    $message = $_POST['message'];
    $captcha = $_POST['captcha'];

    if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"]))
    {
        @mail('mymail@gmail.com', 'Subject', $message, 'From:' . email);
        echo "Message successfully sent.";
    }
    else
    {
        // change opacity of #error div
    }
?>

问题是如果输入了错误的验证码,如何更改隐藏 div 的不透明度?在这种情况下,我需要将此代码插入 PHP 脚本或其他地方:

$('#error').css({opacity:'1'}); 

请记住,我不能使用 echo 注入代码,因为我使用警报来获取从 PHP 脚本返回的信息。

4

4 回答 4

0

通常我使用这样的div:

<div id="error" style="display: none;">ERROR PUT HERE</div>

使用 Jquery,您可以调用...

$('#error').show();

让它可见!

编辑:我明白你在做什么。我建议您使用 JSON 作为您的数据类型。

尝试以下

PHP

<?php
session_start();
$email = $_POST['email'];
$message = $_POST['message'];
$captcha = $_POST['captcha'];

if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"]))
{
    @mail('mymail@gmail.com', 'Subject', $message, 'From:' . email);
    echo json_encode(array('success' => true, 'message' => "Message successfully Sent"));
}
else
{
    echo json_encode(array('success' => false, 'message' => "(PUT YOUR MESSAGE HERE!)"));
}
?>

jQuery

$.ajax({
    type: "POST",
    url: "sendmail.php",
    dataType: "json"
    data: {email: email, message: message, captcha: captcha}
})
.done(function( result ) {
    if(result.success) {
        alert(result.message);
    } else {
        $("#error").text(result.message);
        $('#error').css({opacity:'1'}); 
    }
})
于 2013-07-24T21:51:13.053 回答
0

向您的 jQuery 添加成功部分:

success: function(data) {
    if(data == 'error'){
        $('#error').css({opacity:'1'}); 
    }
}

在你的 PHP 中:

if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"]))
{
    @mail('mymail@gmail.com', 'Subject', $message, 'From:' . email);
    echo "Message successfully sent.";
}
else
{
    echo "error";
}
于 2013-07-24T21:53:46.257 回答
0

建议:使用 ajax .fail() 设置错误

$.ajax({
        type: "POST",
        url: "sendmail.php",
        data: {email: email, message: message, captcha: captcha}
    })
    .done(function( result ) { alert(result); })
    .fail(function() { alert("error");});
于 2013-07-24T21:56:56.843 回答
0

有几种方法可以做到这一点。一种方法是使用可以在加载时执行的 javascript 代码从 php 响应:

<?php
    session_start();
    $email = $_POST['email'];
    $message = $_POST['message'];
    $captcha = $_POST['captcha'];

    if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"]))
    {
        @mail('mymail@gmail.com', 'Subject', $message, 'From:' . email);
        echo "Message successfully sent.";
    }
    else
    {
        // change opacity of #error div
        echo "<script type='text/javascript'>";
        echo "    $('#error').css({opacity:'1'});";
        echo "</script>";
    }
?>

在这种情况下,您的响应是当您打算更改错误 div 的不透明度时要执行的一些 javascript 代码。但是,如果您警告 ajax 的结果,它也会在警告消息中输入整个 javascript 代码。

另一种方法是实际返回 200(成功)以外的错误代码并检查该特定情况:

<?php
    session_start();
    $email = $_POST['email'];
    $message = $_POST['message'];
    $captcha = $_POST['captcha'];

    if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&strtoupper($_SESSION["captcha_code"])==strtoupper($_POST["captcha"]))
    {
        @mail('mymail@gmail.com', 'Subject', $message, 'From:' . email);
        echo "Message successfully sent.";
    }
    else
    {
        // change opacity of #error div
        header('HTTP/1.1 500 Captcha not entered correctly');
        exit();
    }
?>

当您检索 ajax 错误响应时,检查错误代码是否与您抛出的错误代码匹配(在本例中为 500),然后在此处设置不透明度。

于 2013-07-24T22:10:41.140 回答