【问题标题】:AJAX email form will not submitAJAX 电子邮件表单不会提交
【发布时间】:2015-03-02 23:18:26
【问题描述】:

我的网站上有一个电子邮件注册表单,我最近添加了验证。

现在,表单将不会发送或提供错误消息。当我检查检查器时,我看到以下错误:

TypeError: null 不是对象(评估'document.getElementById(update[0]).innerHTML = update[1]')


这是我的contact.php 文件

 <?php
$to = "hello@interzonestudio.com";
$subject_prefix = ""; 

if(!isset($_GET['action']))

$subject = "Newsletter Sign Up"; //The senders subject
$message = trim($_GET['email']); //The senders subject
$email = trim($_GET['email']); //The senders email address

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {

mail($to,$subject,$message,"From: ".$email."");

echo 'contactarea|<div id="thanks">Thank you. We promise you won’t regret it.</div>';

else {
  echo("$email is not a valid email address");
}
?>

这是我的 HTML 表单

<div id="contactarea">
    <span style="font-family: 'Old Standard TT', serif;">Newsletter</span>
    <form id="contactform" name="contactform" >
        <input class ="email" type="text" name="email" id="inputbox" value="E-Mail"
onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>
        <input type="submit" value="Submit" name="send" onclick="sendemail(); return false; " class="signup" >
        </form>
    </div>

这是我的javascript

<script language="javascript">
    function createRequestObject() {
        var ro;
        var browser = navigator.appName;
        if (browser == "Microsoft Internet Explorer") {
            ro = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            ro = new XMLHttpRequest();
        }
        return ro;
    }
    var http = createRequestObject();

    function sendemail() {
        var email = document.contactform.email.value;
        document.contactform.send.disabled = true;
        http.open('get', 'contact.php?email=' + email + '&action=send');
        http.onreadystatechange = handleResponse;
        http.send(null);

        setTimeout(function() {
            jQuery(document).find("#thanks").fadeOut();
        }, 3000);

    }

    function handleResponse() {
        if (http.readyState == 4) {
            var response = http.responseText;
            var update = new Array();
            if (response.indexOf('|' != -1)) {
                update = response.split('|');
                document.getElementById(update[0]).innerHTML = update[1];
            }
        }
    }
</script>

任何见解将不胜感激。

【问题讨论】:

  • 您是否尝试过 console.log(update[0]); 以确保您的 http 响应被拆分并为元素提供正确的 ID?
  • 谢谢。我不确定你的意思。能详细点吗?
  • 您是否在输入错误的电子邮件时收到此错误?如果是这样,您需要将| 添加到您的错误消息中。您的 php 回复正在从 | 拆分,第一个数组用于保存 Div ID,您的 php 错误回复(电子邮件)没有 div id,因此拆分时会导致问题。我认为您不需要将echo("$email is not a valid email address"); 替换为echo("DivID|$email is not a valid email address"); 回声中缺少条!
  • 您的 PHP 也有多个错误,{ 请重新阅读您的 php。您还需要将您的 ajax 调用类型更改为 POST 而不是 GET。您还需要在 php 文件中将其更改为 _POST[] 我想发布作为答案,但如果我这样做了,这将意味着涵盖所有错误,而且这个错误太多了。

标签: javascript php ajax forms validation


【解决方案1】:

我认为这就是您要寻找的:
document.contactform.send.disabled=false;

在 id = "msg" 的 html 页面中添加另一个 div

替换

document.getElementById(update[0]).innerHTML = update[1];



您可以在此处添加条件
取决于您要显示的内容 upload[0] 或 upload[1]
document.getElementById('msg').innerHTML = update[0]+update[1];

并在contact.php

在 else 之前缺少“}”。

【讨论】:

  • 谢谢!这可以验证,但是如果用户输入了错误的电子邮件,如果他们输入了正确的电子邮件,它将不会发送
  • 您仍然需要将此电子邮件地址发送到connect.php。因为您使用 PHP 代码进行电子邮件验证。
  • 是的。你知道我该怎么做吗?
  • 如果你想验证 html 页面中的表单,你必须使用 javascript 并验证输入的输入字符。(正则表达式)或者你可以使用 angulars.js(这将是最好的选择)。跨度>
  • 如果您想在 html 页面中验证表单,您必须使用 javascript 并验证输入的输入字符(正则表达式),然后如果输入不正确,您可以启用或禁用表单提交,或者您可以使用角度。 js(这将是更好的选择)。目前您没有使用表单属性(onfocus,onblur)。而这一行 document.contactform.send.disabled=true;不需要。除非在您的网站中有一些需要此行的代码。
【解决方案2】:

多个错误,客户端和服务器端。

对 javascript 的更改。您的表单数据未在 php 调用中发送。

我已对您的调用类型 get/post 进行了更改,并使用了 new FormData()。如果您想在电话中添加更多内容formdata.append("ParamName", Value/Variable); 并使用$something=$_POST['ParamName']; 获取 PHP 中的帖子。

var formdata = new FormData();
formdata.append("email", email);
formdata.append("action", "send");
http.open('POST', 'contact.php');
http.onreadystatechange = handleResponse;
http.send(formdata);

对 PHP 的更改。您错过了 if 语句的开始/结束。

您的 javascript 设置方式是拆分 php 回复 (|) 如果发布的电子邮件无效,您将导致 JS 错误,因为您的回显中没有 divID 和 bar(|)。

$to = "hello@interzonestudio.com";
$subject_prefix = ""; 
if(isset($_POST['action'])){ // ***** Missing ({) 
$subject = "Newsletter Sign Up"; //The senders subject
$message = trim($_POST['email']); //The senders subject
$email = trim($_POST['email']); //The senders email address
if (!filter_var($email, FILTER_VALIDATE_EMAIL)===false) {
mail($to,$subject,$message,"From: ".$email."");
// **** Div ID Missing with Bar (contactarea|)
echo 'contactarea|<div id="thanks">Thank you. We promise you won\'t regret it.</div>';
// **** Else missing (})
}else {
  echo("contactarea|$email is not a valid email address");
}
}// **** Close if issset  (}) 

我希望我在这个答案中涵盖了你所有的问题。

如果您有任何不明白的地方,请在下面发表评论,我会更新答案以帮助您理解此答案中的任何内容。我宁愿你把这个源代码理解一下,而不是简单的复制粘贴。您不会从复制/粘贴中学习。

Tip: 在将 php 字符串放入 mail() 之前清理它们。

我希望这会有所帮助。快乐编码!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2018-11-05
    • 2011-10-12
    • 2013-09-16
    • 2015-02-06
    相关资源
    最近更新 更多