2015-03-02 77 views
0

我在我的网站上有一个电子邮件注册表单,我最近添加了验证。AJAX电子邮件表格不会提交

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

TypeError: null is not an object (evaluating 'document.getElementById(update[0]).innerHTML = update[1]')


这是我contact.php文件

<?php 
$to = "[email protected]"; 
$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> 

任何有识之士将不胜感激。

+0

您是否尝试过'console.log(update [0]);'以确保您的http响应正在被拆分并给出元素的正确ID? – NewToJS 2015-03-02 23:31:12

+0

谢谢。我不确定你的意思。你能否详细说明一下? – 2015-03-03 00:04:42

+0

当您输入错误的电子邮件时,您是否收到此错误?如果是这样,您需要将'|'添加到您的错误消息中。你的php回复正在被'|'分隔,并且第一个数组被用来保存Div ID,你的php错误回复(email)没有div id,所以当你分裂它时会导致问题。我认为你不需要替换'echo(“$ email不是一个有效的电子邮件地址”);''用echo(“DivID | $ email不是一个有效的电子邮件地址”);'**丢失echo中的条! * – NewToJS 2015-03-03 09:37:12

回答

0

我觉得这是你要找的东西:
document.contactform.send.disabled = false;

添加在使用id = “msg” 中

html页面另一个DIV替换

的document.getElementById(更新[0])的innerHTML =更新[1]。



你可以在这里添加条件
取决于你想要显示上传[0]或上传[1]
的document.getElementById( '味精')。innerHTML的=更新[0] +什么更新[1];

和contact.php

有 '}' 缺少东西之前。

+0

谢谢!这证实了,但如果用户输入了错误的电子邮件,它将不会发送,如果他们然后把一个正确的 – 2015-03-03 00:27:40

+0

你仍然需要发送这个电子邮件地址connect.php。因为您正在使用PHP代码进行电子邮件验证。 – user4621032 2015-03-03 00:35:20

+0

是的。你知道我该怎么做吗? – 2015-03-03 00:41:54

0

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

Changes to javascript. Your form data wasn't being sent in the php call.

我对您的调用类型get/post进行了更改,并使用了新的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); 

Changes to PHP. You missed the opening/closing of the if statements.

你有你的JavaScript设置的方式,您拆分PHP回复(|)如果张贴的电子邮件是无效的,你会引起JS错误,因为你没有足够的DIVID和酒吧(|)在你的回声中。

$to = "[email protected]"; 
$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: Clean your php string before putting them into mail().

我希望这有助于。快乐的编码!