2013-07-31 3 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

btw Я знаю, что эта функция 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

Смежные вопросы