Javascript 如何在jQuery调用函数中从php获取错误消息?

Javascript 如何在jQuery调用函数中从php获取错误消息?,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我有一个带有电子邮件地址、名字、姓氏和复选框的html表单。将数据发布到我的Postgres数据库中,一切正常,但现在我正在过滤post数据,jQuery需要截获来自php的错误 例如,php程序的这一部分过滤电子邮件地址: if (empty($_POST["email_field"])) { $emailErr = "Email is required"; echo $emailErr; } else { $email = trim($_POST["email_fie

我有一个带有电子邮件地址、名字、姓氏和复选框的html表单。将数据发布到我的Postgres数据库中,一切正常,但现在我正在过滤post数据,jQuery需要截获来自php的错误

例如,php程序的这一部分过滤电子邮件地址:

if (empty($_POST["email_field"])) {
    $emailErr = "Email is required";
    echo $emailErr;
} else {
    $email = trim($_POST["email_field"]);
    $email = stripslashes($email);
    $email = htmlspecialchars($email);
    echo 'EMail Filtered ' . $email . '!';
    echo PHP_EOL;
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format";
        echo $emailErr;
        echo PHP_EOL;
        return 1;
    }
}
在程序遇到电子邮件错误时返回1的地方,我想向最终用户显示一条带有“无效电子邮件地址”的html消息,但我不清楚jQuery如何获取该信息

以下是jQuery函数,它从提交按钮的onclick-even启动,并调用php函数将表单数据输入Postgres数据库:

<script type="text/javascript">
$("#btn_submit").on("click", function (event) {
    event.preventDefault();
    form_data = $('form').serialize()
    console.log("Okay, I'm starting");
    console.log(form_data);
    console.log("More Info");
    return $.ajax({
        type: "POST",
        url: "collect_data.php",
        data: form_data,
        success: function ( responseText) {
          console.log("Server Reply " + responseText);
        },
        error: function (error) {
          console.log("Server Reply FAIL " + error);
        }
    });
});
</script>
HTML:


$(“#btn_提交”)。在(“单击”上,功能(事件){
event.preventDefault();
form_data=$('form')。serialize()
log(“好的,我开始了”);
console.log(form_数据);
控制台日志(“更多信息”);
返回$.ajax({
类型:“POST”,
url:“collect_data.php”,
数据:表格数据,
数据类型:“json”,
成功:功能(响应){
if(response.success){
日志(“服务器回复”+响应消息);
}否则{
日志(“服务器错误”+响应错误);
}
},
错误:函数(错误){
console.log(“服务器回复失败”+错误);
}
});
});

您应该让脚本发送JSON。然后您可以构造它,以便客户端可以提取错误消息

$message = '';
$emailErr = '';
if (empty($_POST["email_field"])) {
    $emailErr = "Email is required";
} else {
    $email = trim($_POST["email_field"]);
    $email = stripslashes($email);
    $email = htmlspecialchars($email);
    $message = 'EMail Filtered ' . $email . '!';
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format";
    }
}
$result = ['success' => empty($emailErr), 'error' => $emailErr, 'message' => $message];
echo json_encode($result);
JS检查
success
属性:

$("#btn_submit").on("click", function (event) {
    event.preventDefault();
    form_data = $('form').serialize()
    console.log("Okay, I'm starting");
    console.log(form_data);
    console.log("More Info");
    return $.ajax({
        type: "POST",
        url: "collect_data.php",
        data: form_data,
        dataType: 'json',
        success: function (response) {
          if (response.success) {
              console.log("Server Reply " + response.message);
          } else {
              console.log("Server error " + response.error);
          }
        },
        error: function (error) {
          console.log("Server Reply FAIL " + error);
        }
    });
});

PHP中
echo'Hello'之间发生了什么。htmlspecialchars($_POST[“firstname”])
if(空($\u POST[“email\u field”])){
?大概它找到了退出的理由,没有回显任何其他内容。但我认为您没有显示所有代码?谢谢,@Barmar。这确实有助于澄清。我刚刚研究了您的代码,看起来它应该可以解决问题。我现在就开始工作。非常感谢。我只是按照您上面所示的方式修改了html和php代码,但它没有问题失败。我关心的是php代码右大括号下方的$result字符串——它不应该在最后一个封闭大括号的上方吗?当我研究php$result时,它只在MySql的上下文中出现,但我使用Postgres——这会有什么不同吗?我将编辑上面的代码,以显示现在的代码,以便您可以查看挖掘它。不,它是正确的位置。我们需要在所有情况下发送结果。有时结果报告成功,有时报告错误。代码与昨天相同。如果电子邮件地址输入中有错误,我认为这将报告错误,并指定错误。JavaScript conso中是否有错误le?您是否尝试过使用控制台的“网络”选项卡查看发送和接收的内容?
<script type="text/javascript">
$("#btn_submit").on("click", function (event) {
    event.preventDefault();
    form_data = $('form').serialize()
    console.log("Okay, I'm starting");
    console.log(form_data);
    console.log("More Info");
    return $.ajax({
        type: "POST",
        url: "collect_data.php",
        data: form_data,
        dataType: 'json',
        success: function (response) {
          if (response.success) {
              console.log("Server Reply " + response.message);
          } else {
              console.log("Server error " + response.error);
          }
        },
        error: function (error) {
          console.log("Server Reply FAIL " + error);
        }
    });
});
</script>
$message = '';
$emailErr = '';
if (empty($_POST["email_field"])) {
    $emailErr = "Email is required";
} else {
    $email = trim($_POST["email_field"]);
    $email = stripslashes($email);
    $email = htmlspecialchars($email);
    $message = 'EMail Filtered ' . $email . '!';
    // check if e-mail address is well-formed
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format";
    }
}
$result = ['success' => empty($emailErr), 'error' => $emailErr, 'message' => $message];
echo json_encode($result);
$("#btn_submit").on("click", function (event) {
    event.preventDefault();
    form_data = $('form').serialize()
    console.log("Okay, I'm starting");
    console.log(form_data);
    console.log("More Info");
    return $.ajax({
        type: "POST",
        url: "collect_data.php",
        data: form_data,
        dataType: 'json',
        success: function (response) {
          if (response.success) {
              console.log("Server Reply " + response.message);
          } else {
              console.log("Server error " + response.error);
          }
        },
        error: function (error) {
          console.log("Server Reply FAIL " + error);
        }
    });
});