2016-01-05 6 views
0

Я новичок в Php и Ajax, и я ударился головой об этой проблеме. Я пытаюсь получить мою простую форму для обновления с помощью ajax с помощью функции сокращения строки $.post, но мой сценарий ничего не возвращает. Я попытался с $.ajax, а также, и используются различные типы данных, как JSon объектов, переменная JSon, serialize() .. и т.д.


HTML

<section class="contact" id="contact"> 



    <h2>Do you have a project in mind? Let's discuss it</h2> 

    <div id="form-messages"> 

    </div> 


    <form action="" method="post" id="contact-form"> 

     <div class="row"> 
      <div class="col span-1-of-4"><label for="name">Your name</label></div> 
      <div class="col span-3-of-4"><input type="text" name="name" id="name" placeholder="Enter your name ..."></div> 
     </div> 

     <div class="row"> 
      <div class="col span-1-of-4"><label for="email">Your email</label></div> 
      <div class="col span-3-of-4"><input type="email" name="email" id="email" placeholder="Enter your email ..."></div> 
     </div> 

     <div class="row"> 
      <div class="col span-1-of-4"><label for="message">Your message</label></div> 
      <div class="col span-3-of-4"><textarea name="message" id="message" placeholder="Type in your message ..."></textarea></div> 
     </div> 

     <div class="row"> 
     <div class="col span-1-of-4"></div> 
      <div class="col span-3-of-4"><input type="submit" name="submit" id="submit" value="Send your message"></div> 

     </div> 
    </form> 




</section> 

PHP

<?php   

$name= $_POST['name']; 
$email= $_POST['email']; 
$message= $_POST['message']; 
$error=""; 
$result=""; 

if (isset($_POST["submit"])) { 
if (!$name) { 
    $error="<br />Please enter your name"; 
} 
if (!$email) { 
    $error.="<br />Please enter your email address"; 
} 
if (!$message) { 
    $error.="<br />Please enter a message"; 
} 

if ($_POST['email']!="" AND !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
     $error.="<br />Please enter a valid email address"; 
    }      
if ($error) { 
    $result='<div class="error-message"><p id="alert"><strong>There were error(s) in your form:</strong>'.$error.'</p></div>'; 
} else { 
    if (mail("[email protected]", "Gadmy Visions: Someone sent you a message!", 
    "Name: ". $_POST['name']." 
    Email: ".$_POST['email']." 
    Comment: ".$_POST['message'])) { 
     $result='<div class="success-message"><p id="alert"><strong>Thank you!</strong> I\'ll be in touch</p></div>'; 
    } else {             
     $result='<div class="error-message"><p id="alert">Sorry, there was an error sending your message. Please try again later.</p></div>'; 
    } 
} 

echo $result; 
} 

?> 

JS

$(document).ready(function(){ 
      $('#contact-form').on('submit',function(event){ 



    $.post('contact.php',$('form').serialize(), function(data){ 
     $('#form-messages').html(data);   
    }); 

    //Prevent refresh 
    event.preventDefault();  

    }); 

}); 
+0

Попробуйте 'var_dump ($ _ POST)' в вашем php-файле и проверьте, действительно ли вы отправляете данные. Кроме того: что говорят ваши консольные консоли/сетевые инструменты? Есть ли повторения? Опубликованы ли данные? – ccKep

+0

Очевидно, что функция выполняется, и когда я регистрирую результат на консоли, он просто дает пустую строку. –

+0

Ваш php-файл выводит что-то только в том случае, если '$ _POST [" submit "]' установлен, поэтому идея var_dump его содержимого, поскольку она, похоже, не выполняется. Также: log '$ ('form'). Serialize()' для консоли JS для дальнейшей отладки. – ccKep

ответ

0

Попробуйте проверить, может ли форма быть отправлена ​​с помощью

if ($ _ SERVER ['REQUEST_METHOD'] == "POST") вместо использования isset ($ _ POST ["submit"])).

+0

Большое спасибо, это исправлено. –

1

Короче говоря:

JQuery сериализации() не сериализовать кнопки (так как он не знает, какая кнопка была использована для отправки формы). См: Link Aswell как jQuery serialize documentation:

Примечание: Только "успешные управления" упорядочиваются в строку. Значение кнопки отправки не сериализуется, так как форма не была отправлена ​​с помощью кнопки.

Поскольку РНР-файл генерирует только выход, если $_POST["submit"] установлен (что не так, поскольку он не сериализовать вместе с остальной частью формы) ничего фактически не вернулся.

Либо используйте другое условие в вашем php-файле, чтобы проверить, действительно ли форма была успешно отправлена ​​или вручную добавлена ​​кнопка отправки к сериализованным данным.

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