2013-07-31 142 views
0

我正在嘗試爲我擁有的網站實現表單插件。它應該是非常簡單的,但它拒絕像我想要的那樣行事。Ajax在表單提交後沒有正確填充目標DIV

這是一個簡單的PHP電子郵件形式內的div,一旦正確提交,被替換成一個成功或失敗的消息,在同一個div內。現在我的JS只是在窗體頂部添加消息。

我很震驚,因爲我認爲我解決了一些嚴重的麻煩,因爲我這樣做的經驗,但我無法擺脫這個簡單的錯誤。我想要的只是DIV內的響應消息一旦包含表單。

這裏是包括PHP:

if (isset($_REQUEST['sender']) && isset($_REQUEST['message'])) {//if "sender" and "message" is filled out, proceed 

    //check if the email address is invalid 
    $mailcheck = spamcheck($_REQUEST['sender']); 
    if ($mailcheck==FALSE) { 
     echo "An error has occurred" . $_REQUEST['sender'] . " " . $_REQUEST['message']; 
    } 
    else {//send email 
     $email = $_REQUEST['sender'] ; 
     $subject = "This is the subject" ; 
     $message = $_REQUEST['message'] ; 
     mail("[email protected]", $subject, $message, "From: $email"); 
     echo "Your message was sent"; 
    } 

} 

function createForm($formID, $formName) { 
    echo "<div id=\"" . $formID . "\" class=\"ajaxForm\" >" . PHP_EOL; 
    echo "<form name =\"" . $formName . "\" method=\"post\" onsubmit=\"ajaxUpdate(\"" . $formID . "\",\"sandbox.php\"," . sender . "," . message . ");>" . PHP_EOL; 
    echo "<input name=\"sender\" type=\"text\" placeholder=\"email\" required><br>" . PHP_EOL; 
    echo "<br>" . PHP_EOL; 
    echo "<textarea rows=\"6\" cols=\"40\" name=\"message\" placeholder=\"message\" required></textarea><br>" . PHP_EOL; 
    echo "<input type=\"submit\" value=\"Send\" >" . PHP_EOL; 
    echo "</form>" . PHP_EOL; 
    echo "</div>" . PHP_EOL; 
} 


function spamcheck($field) { 
    //filter_var() sanitizes the e-mail 
    //address using FILTER_SANITIZE_EMAIL 
    $field=filter_var($field, FILTER_SANITIZE_EMAIL); 

    //filter_var() validates the e-mail 
    //address using FILTER_VALIDATE_EMAIL 
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) { 
     return TRUE; 
    } 
    else { 
     return FALSE; 
    } 
} 

而ajaxUpdate JS:

function ajaxUpdate(targetDIV, responsePHP, param1, param2) { 

    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { 
     // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById(targetDIV).innerHTML = xmlhttp.responseText; 
     } 
    } 
    var strContent = responsePHP + "?sender=" + param1 + "&message=" + param2; 
    xmlhttp.open("POST", strContent, true); 
    xmlhttp.send(); 
} 

我通過包含js和PHP,以及使用的CreateForm產卵形式(使用)功能。

請一些幫助..

+0

基本上,這是一個錯過廁所的情況.. – wavvves

+0

順便說一句,我知道這個JS功能是一個很大的安全失敗,它現在就這樣簡單。 – wavvves

+0

你的問題有點混亂。你的意思是什麼'div',爲什麼你不能得到它? – MahanGM

回答

0

這條線是不正確的:

echo "<form name =\"" . $formName . "\" method=\"post\" onsubmit=\"ajaxUpdate(\"" . $formID . "\",\"sandbox.php\"," . sender . "," . message . ");>" . PHP_EOL; 

你必須使用函數調用單引號:

echo "<form name =\"" . $formName . "\" method=\"post\" onsubmit=\"ajaxUpdate('" . $formID . "','sandbox.php','" . sender . "','" . message . "');\">" . PHP_EOL; 

爲了防止提交您可以只返回false

echo "<form name =\"" . $formName . "\" method=\"post\" onsubmit=\"ajaxUpdate('" . $formID . "','sandbox.php','" . sender . "','" . message . "');return false;\">" . PHP_EOL; 
+0

感謝您的提示,但我想這個問題與沒有任何東西阻止默認表單提交有關。因爲我沒有使用jQuery(並且不想),我該如何自己實現它? – wavvves

+0

@johnpopes檢查我的編輯。 – MahanGM

+0

謝謝!而已!該網站使用jQuery解決方案進行感染,謝謝;) – wavvves