2015-03-02 75 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().

我希望這有助於。快樂的編碼!