jQuery.post未从php脚本接收错误
我知道以前有人问过这个问题,我看过了所有我能找到的关于这个问题的帖子。我仍然无法让jQuery.post函数正确接收来自php脚本的错误。这两个都是。jQuery.post未从php脚本接收错误,php,javascript,jquery,post,Php,Javascript,Jquery,Post,我知道以前有人问过这个问题,我看过了所有我能找到的关于这个问题的帖子。我仍然无法让jQuery.post函数正确接收来自php脚本的错误。这两个都是。 PHP: 我已经尝试了大约5种不同的方法,但没有一种有效。当我在.post函数中将'json'作为数据类型时,.fail总是激发,无论php脚本中有什么内容。如果我不使用数据类型,那么,失败在任何情况下都不会触发。我觉得问题在于php命令和数据类型。非常感谢您的帮助。可能是因为您没有更改响应的http头代码,也没有指定响应的数据类型 在任何情况下
PHP:
我已经尝试了大约5种不同的方法,但没有一种有效。当我在.post函数中将'json'作为数据类型时,.fail总是激发,无论php脚本中有什么内容。如果我不使用数据类型,那么,失败在任何情况下都不会触发。我觉得问题在于php命令和数据类型。非常感谢您的帮助。可能是因为您没有更改响应的http头代码,也没有指定响应的数据类型 在任何情况下,您都可以使用状态为“200–OK”的php代码响应前端(jQuery)代码,但在某些情况下,您可能会遇到“HTTP/1.0 400–错误请求”响应或“HTTP/1.0 500内部服务器错误”错误 像Eggplant一样,您必须将响应数据类型指定为“Content-type:application/json” 最后的代码是这样的:
<?php
...
header('HTTP/1.0 204 – No Content', true, 204);
header('Content-Type: application/json');
if ( empty($myname) || empty($myemail) || empty($mymessage) ) {
header('HTTP/1.0 400 – Bad Request', true, 400);
exit('{"error":"That value was invalid!"}')
} else {
...
$send = mail( $toemail, $subject, $body, "From: $email" );
if (!$send)
header('HTTP/1.0 500 – Internal Server Error', true, 500);
exit ('{"error":"Mail could not be sent."}');
}
}
return;
?>
尽管您的是有效的JSON数据,但我始终建议使用JSON_encode()函数来创建JSON字符串
exit(json_encode(array("error" => "That value was invalid!")));
另一个方法是确保发送正确的头,以确保脚本知道它是json数据。所以
header('Content-Type: application/json');
exit(json_encode("error" => "That value was invalid!"));
试试这个
if (verify(myname, myemail, mymessage, human, hash, patt)) {
$.ajax({
type :'POST',
data :$("#myformid").serialize(),
beforeSend:function(){
},
success:function(res){
if(res=='ok'){
setTimeout("$('#email-success').fadeOut();", 5000);
}else{
//read respon from server
alert(res)
}
},
error:function(){
//error handler
}
});
}
举个例子
$send = mail(....);//your mail function here
echo ($send) ? "ok" : "Error";
您是否检查过php脚本的实际响应?使用一些像firebug这样的工具。谢谢你给我关于firebug的提示。它确实提供了洞察力。请帮我理解。如果我从.post函数中完全删除数据字符串,.post希望从php脚本返回什么样的数据?另一件事,当我尝试将标题设置为代码400时,firebug告诉我无法更改标题。这可能是因为我在提交表单时没有离开页面,而是使用jquery中的post函数并显示div与用户通信。从最简单的开始:确保在php脚本中的任何其他输出之前设置标题,这将解决标题无法修改的问题。.post处理程序希望PHP脚本返回您指定的dataType
中的一些数据,在本例中是一些JSON。如果没有返回任何内容,则不应成为问题,返回200状态就足够了。但是,再次向firebux确认引擎盖下发生了什么。您可以返回ConventNoal确认JSON,如{“response”:“ok”}
,如果您喜欢.yes,这就是在任何情况下都不会调用.fail处理程序的原因。关于问题的另一部分,有必要设置正确的内容类型头,如header('content-type:application/json')代码>,但如果成功,脚本似乎不会返回任何内容。当我实现此操作时,Firebug显示一个错误,即无法修改标题。@Eggplant:带有204代码的标题集将解决不返回问题case@preahkumpii在返回视图(或任何打印)之前,必须调用header()函数,这就是出现此警告的原因。调用此函数之前是否打印了数据?此建议很合理。我的问题是UTF-8文件有BOM表。这导致无法修改标题错误。谢谢@Palmplamw当我这么做时,我在firebug中收到一个错误,说那里的单词格式不正确>>。试试这个:exit(json_encode(数组(“error”=>“该值无效”))代码>@preahkumpii,那是个打字错误对不起。Fixed@Eggplant,我尝试了您的解决方案,但出现无法修改标题错误。我也尝试了您的答案。它也不起作用。不知道为什么。
if (verify(myname, myemail, mymessage, human, hash, patt)) {
$.ajax({
type :'POST',
data :$("#myformid").serialize(),
beforeSend:function(){
},
success:function(res){
if(res=='ok'){
setTimeout("$('#email-success').fadeOut();", 5000);
}else{
//read respon from server
alert(res)
}
},
error:function(){
//error handler
}
});
}
$send = mail(....);//your mail function here
echo ($send) ? "ok" : "Error";