我有一个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;
}
?>
当我按下按钮时,成功动作仍然有效,我不知道为什么。
答案 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脚本的结果作为响应。如果服务器太忙而无法响应请求,服务器在处理您的请求时崩溃,您请求不存在的文件等,则请求失败。