【发布时间】:2014-08-08 20:16:32
【问题描述】:
我想提交我的表单并且 AJAX 调用应该将该数据发送到我的 php 文件。在我的 php 文件中是带有filter_var 的电子邮件验证,如果验证返回 false,则响应应该返回到 Javascript。除了验证部分,它的效果很好。但是每次我想提交并检查它是否是有效的电子邮件时,它都会返回 false 并显示“请输入有效的电子邮件”。如果它是有效或错误的电子邮件地址,则相等。
更新 - 09.08.2014/04:12
现在它基本上可以工作但,如果它没有错误消息,我会收到一个问题Cannot read proberty "isError" of null,这是合乎逻辑的。但是不知道如何避免该问题以将其正确传递回javascript。
HTML
<form action="submit.php" id="SubmitForm" method="post">
<input id="mail" name="mail" type="text" />
</form>
<button id="submitAll">
<span>Submit</span>
</button>
Javascript
function submit() {
var $form = $('form#SubmitForm');
$.post(
$form.attr('action'),
$form.serialize(),
function (data) {
if (data.isError) {
$errMsg.empty().text('Please enter a valid email');
} else {
document.location.href = "submit.php"
}
},'json'); }
PHP
$profileEmail = $_POST['mail'];
$errorMessages = array();
if(!filter_var($profileEmail, FILTER_VALIDATE_EMAIL)){
$errorMessages[] = "* Please enter a valid e-mail";
} else {
$errorMessages[] = "* Valid e-mail";
}
if (!empty($errorMessages)) {
die(json_encode(array('isError' => true, 'errorMessages' => $errorMessages)));
}
【问题讨论】:
-
为什么要向服务器发送一个字符串以对其执行模式匹配?这完全可以在 JS 中处理。
-
@Quentin 您在这里已经足够久了,您应该知道有效的电子邮件地址检查非常困难,以至于您无法执行任何简单的客户端匹配。唯一可行的测试是对所提供地址的域名部分执行实际 DNS 查找。
-
实际上 - 您可以在客户端进行 一个 有效测试 - 地址中是否包含
@。但即使这样也不是万无一失的,因为它必须是本地部分没有引用的地址——"foo@bar"@example.com实际上是一个合法地址。 -
OP - 只需先尝试一个没有 AJAX 的简单表单 -
filter_var代码 看起来 好的,所以尝试围绕参数传递等进行一些调试,并首先使其正常工作在将 AJAX 及其潜在故障模式引入方程式之前。 -
我通过 php 验证电子邮件地址的事实是,您可以轻松打开 javascript 和 javascript 验证。
标签: php jquery ajax validation email