当某些东西不起作用时,处理jQuery.ajax()中的错误

时间:2013-06-05 11:06:07

标签: php jquery ajax

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

$(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;
    }
?>

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

7 个答案:

答案 0 :(得分: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';
?>

答案 1 :(得分:1)

删除错误功能&amp;改变你的成功功能

 $.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');
            }

        });

答案 2 :(得分:0)

在这两种情况下,都会触发成功回调:

success: function(responseText) {
                if(!!responseText)  //!! convert string to boolean
                   $('#result').css('background', 'green');
                else
                   $('#result').css('background', 'red');
            },

答案 3 :(得分:0)

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

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

然后在成功的功能中做到这一点:

       success: function(responseText) {
           if(responseText) {
            $('#result').css('background', 'green');
           } else {
            $('#result').css('background', 'red');
           }
        }

答案 4 :(得分: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;
    });
});

答案 5 :(得分: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");
}

});

答案 6 :(得分: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脚本的结果作为响应。如果服务器太忙而无法响应请求,服务器在处理您的请求时崩溃,您请求不存在的文件等,则请求失败。

相关问题