2

我有一个带有使用 jQuery.ajax() 发送的表单的 php 文件。如果未发送电子邮件并且未显示错误消息,我遇到的问题。

$(document).ready(function () {
    $('input[type="submit"]').click(function () {
        $.ajax({
            url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
            },
            cache: false,
            success: function(responseText) {
                $('#result').css('background', 'green');
            },
            error: function(responseText) {
                $('#result').css('background', 'red');
            }
        });
        return false;
    });
});

由于未发送电子邮件,因此错误未显示任何内容,但成功是。因此,我将 mail.php 代码更改为其他代码。

<?php
    if(2 > 4) {
        true;
    } else {
        false;
    }
?>

当我按下按钮时,成功操作仍然有效,我不知道为什么。

4

7 回答 7

2

错误回调仅在 ajax 调用失败时触发,而不是在 PHP 邮件函数失败时触发,如果您返回 false,则不会触发,因为您从服务器收到了返回的内容(字符串“false”)。

要捕获这样的错误,您可以从 PHP 触发错误,也可以在成功处理程序中捕获它:

success: function(data) {
    if (!data || $.trim(data) == 'false') {
        $('#result').css('background', 'red');
    }else{
        $('#result').css('background', 'green');
    }
},

和 PHP

<?php
    echo 2>4 ? 'true' : 'false';
?>
于 2013-06-05T11:08:34.670 回答
1

Remove the error function & make changes to your success function

 $.ajax({
            url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
            },
            cache: false,
success: function(responseText) {
                if(responseText)$('#result').css('background', 'green');
                else $('#result').css('background', 'red');
            }

        });
于 2013-06-05T11:09:02.833 回答
0

In your both cases, the success callback is fired:

success: function(responseText) {
                if(!!responseText)  //!! convert string to boolean
                   $('#result').css('background', 'green');
                else
                   $('#result').css('background', 'red');
            },
于 2013-06-05T11:08:48.907 回答
0

首先在要返回的 mail.php 文件 echo 中:

<?php
    if(2 > 4) {
      echo "true";
    } else {
       echo "false";
    }
?>

然后在成功功能中这样做:

       success: function(responseText) {
           if(responseText) {
            $('#result').css('background', 'green');
           } else {
            $('#result').css('background', 'red');
           }
        }
于 2013-06-05T11:14:29.743 回答
0

除非 jQuery 无法连接到您的 php 文件,否则错误函数不会触发,在这种情况下,您将不想处理自己的错误,首先这是做什么的?

if(2 > 4) {
    true;
} else {
    false;
}

这不会将任何内容发送回 jQuery 我推荐以下

if(2 > 4) {
   echo 'true';
} else {
   echo 'false';
}

然后在你的 jQuery

$(document).ready(function () {
    $('input[type="submit"]').click(function () {
        $.ajax({
            url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
            },
            cache: false,
            success: function(result) {
                if(result === 'true') {
                   $('#result').css('background', 'green');
                } else {
                  $('#result').css('background', 'red');
                }
            },
            error: function(error) {
                alert(error)
            }
        });
        return false;
    });
});
于 2013-06-05T11:15:03.827 回答
0

它还取决于您使用的 jquery 版本。如果它是 1.9,那么您可以使用 done、fail 和 always 来处理它

对于 1.9

var request = $.ajax({
url: "mail.php",
            type: "POST",
            data: {
                name: $('input[name="name"]').val(),
                email: $('input[name="email"]').val(),
                msg: $('input[name="msg"]').val()
    }

});

request.done(function(e){
//GET THE STATUS FOR THE EMAIL FROM THE PHP SCRIPT
//ASSUMPTION THAT FETCHING e=1/0 - 1 - Success, 0 - Failure
if(parseInt(e))
{
$("#result").css("background","green");
}
else
{
$("#result").css("background","red");
}

});
于 2013-06-05T11:17:27.163 回答
0

1)您的 php 脚本不返回任何内容。例如,如果您从 html 页面中删除所有 javascript,并且您的表单的 action 属性指定了 myphp.php,那么 myphp.php 如下所示:

<?php

$html = "<html><head></head><body><div>Hello world.</div></body></html>";

?>

点击表单的提交按钮后会显示什么?

2)如果请求失败,则调用错误函数。从您的 php 脚本中获得无响应或错误的响应并不是请求失败。请求成功意味着浏览器发出请求,服务器收到请求,服务器导致您的 php 脚本执行,服务器将您的 php 脚本的结果作为响应发回。如果服务器太忙而无法响应请求,服务器在处理您的请求时崩溃,您请求的文件不存在等,则请求失败。

于 2013-06-05T11:23:18.310 回答