Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery.post未从php脚本接收错误_Php_Javascript_Jquery_Post - Fatal编程技术网

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头代码,也没有指定响应的数据类型 在任何情况下

我知道以前有人问过这个问题,我看过了所有我能找到的关于这个问题的帖子。我仍然无法让jQuery.post函数正确接收来自php脚本的错误。这两个都是。
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";