0

我已经让我的表单通过 PHP 提交,但我在 AJAX 方面有点挣扎。提交后,总是会出现错误,好像 res 设置为 false 而不是 true。我试着玩弄代码并寻找自己的答案,因为我确实想学习,但我没有找到我需要的东西。

请您指出我做错了什么的正确方向吗?

非常感谢你!

供您参考的代码:

$('#contact_form').submit(function() {

    var this_form = $(this);
    $.ajax({
        type: 'post',
        data: this_form.serialize(),
        url: 'scripts/send_email.php',
        success: function(res) {
            if(res == "true") {
                $(this_form)[0].reset();
                $(".notice").removeClass("error").text("Thank you for contacting us!").addClass("success").fadeIn("fast");
            } else {
                $(".notice").text("Please check all fields and try again.").addClass("error").fadeIn("fast");
            }
        }
    });

});
4

3 回答 3

0

由于res代表的值,您的真值比较似乎返回错误。您正在检查以确保它是一个值为“true”的字符串。如果不是,则触发 else 代码。

success只有在 AJAX 传输成功时才会执行您的属性。您需要将比较检查设置为所需的输出send_email.php,即“成功!” 或“失败!” 以表明正确的处理方式。

成功(数据,文本状态,jqXHR)

请求成功时调用的函数。该函数获得三个参数: 从服务器返回的数据,根据 dataType 参数格式化;描述状态的字符串;和 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。从 jQuery 1.5 开始,success 设置可以接受一个函数数组。每个函数都会被依次调用。

有关在 jQuery 中处理 AJAX 请求的更多信息,请参阅文档。

success: function(res) {
    if (res == "Success!") {
        $(this_form)[0].reset();
        $(".notice").removeClass("error").text("Thank you for contacting us!").addClass("success").fadeIn("fast");
    } else {
        $(".notice").text("Please check all fields and try again.").addClass("error").fadeIn("fast");
    }
}
于 2012-07-10T19:06:07.387 回答
0

尝试要求:

if(res == true)

反而。避免此类问题的另一个好方法是通过 firebug 或 chrome 调试器调试您的 javascript,如果您使用的是 chrome,您可以将此行添加到您的代码中:

debugger;
if(res == "true")

并且 javascript 将停在那里,因此您可以检查变量并查看发生了什么。你可以通过“选项-->工具-->开发者工具-->脚本”打开它。

希望这可以帮助 :)

于 2012-07-10T19:08:45.763 回答
0

在您的 send_email.php 文件中,如果成功,则回显“success”。

然后像这样修改您的 AJAX 调用:

success: function(data) {
if (data == "success") {do stuff} else {do failure stuff}
}
于 2012-07-10T19:13:22.860 回答