Проблемы с jQuery, PHP и AJAX - PullRequest
1 голос
/ 22 апреля 2011

Итак, я прочитал страницы jQuery AJAX и кучу учебников, но у меня возникла небольшая проблема.

Нет ошибок или предупреждений, только пустая страница.

Я пытаюсь отправить электронное письмо, когда пользователь заполняет поле проверки подписки на рассылку своим адресом электронной почты, и когда вы нажимаете кнопку Отправить, страница обновляется!(1-я проблема), и на странице ничего не отображается (вторая проблема), все, что вы видите, это просто пустая страница.Письма не были получены.

Я отдельно протестировал почтовый скрипт, который отлично работает.Я месяцами использую разные сайты, поэтому знаю, что это работает.

Я пытался что-то изменить в jQuery и т. Д., Но ничего не помогло решить эту проблему.

jQuery:

$(function () {
    var txt = $('.email').val();

    $.ajax({
        url: 'index.php',
        type: 'post',
        data: {
            email: txt
        },
        success: function (data) {
            alert(data);
        },
        error: function (err, req) {
            $('#Response').html({
                "Somethin' got broked. Please try again."
            });
        }
    });
});

PHP:

<?php


    if($_POST["email"] != null)
    {
        require_once "Mail.php";

        $email = $_POST["email"];

        // Send it.
        $from = "X@X.com.au";
        $to = $email;
        $subject = "Newsletter Subscription Request.";
        $body = "Thank you for subscribing to our newsletter!";
        $host = "mail.X.com.au";
        $username = "no-reply@X.com.au";
        $password = "X";
        $headers = array ('From' => $from,
                    'To' => $to,
                    'Subject' => $subject);
        $smtp = Mail::factory('smtp',
                    array ('host' => $host,
                    'auth' => true,
                    'username' => $username,
                    'password' => $password));
        $mail = $smtp->send($to, $headers, $body);
    }
?>

HTML:

  <h4 id="Response">Stay informed. Subscribe to our Newsletter!</h4>
      <form class="newsletterForm" action="index.php" method="post">
        <input type="text" class="email" name="email" />
        <input type='submit' class="btn" value="Subscribe" />
      </form>

Может кто-нибудь помочь мне выяснить, почему это не сработает?

Спасибовы

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Первое, что я делаю, когда подобные вещи не работают, это отслеживаю вызовы страниц в окне Chrome Developer Tools.

Что касается вашего кода, то страница обновляется потому, что отправка формы проходит. Чтобы этого не случилось, вы должны перехватить форму отправки:

$("form").submit(function() {
        // Do ajax
        return false; // Keeps the form from submitting
    });

Как только вы это сделаете, вы получите лучшие результаты.

Однако я хотел бы предостеречь, что гораздо легче заставить форму отправки электронной почты PHP работать без с использованием сначала ajax, просто обработав ее при отправке обычной формы. Как только это сработает, привяжите ajax поверх него.

1 голос
/ 22 апреля 2011

Следующей строкой вы предполагаете получить ответ из скрипта PHP

success: function(data) { 
            alert(data);  
}

Но в скрипте PHP вы ничего не выводите ... Попробуйте написать что-то вроде

 //[...]
 $smtp = Mail::factory('smtp',
                    array ('host' => $host,
                    'auth' => true,
                    'username' => $username,
                    'password' => $password));
        $mail = $smtp->send($to, $headers, $body);
        die(1);
0 голосов
/ 12 февраля 2015

Пожалуйста, попробуйте это, конечно, вы можете решить проблему.
function FormSubmit() { $.ajax({ type: "POST", url: 'index.php', data: $("#form_main").serialize(), async: false }).done(function( data ) { $("#Response").hide(); if (isNaN(data)) {<br> dispmsg = "<div class='alert alert-danger' role='alert'>Oops..Something had gone wrong! Please try again!</div>"; $("#assess_me_response").html(dispmsg); setTimeout('ResetForm();',3000); } else { dispmsg = "<div class='alert alert-success' role='alert'>Thank you for sharing the details. Our Consultant will contact you shortly!</div>"; $("#assess_me_response").html(dispmsg); setTimeout('Redirect();',3000); } return true; }); }

сделайте ваш php следующим образом.

<?php
$to = "xxxx@some.com";  

$name = $_POST['name'];
$email = $_POST['email'];
$age = $_POST['age'];
$phone = $_POST['phone'];   
$subject = "Entry received";                                        

$msg = "\n Name:" . $name . "\n Email id:" . $email ."\n Age:". $age . "\n Contact number: " . $phone;      
$headers = "From:xxx@yyy.com";
mail($to,$subject,$msg,$headers);
echo "<div align='center'>Thank you " . $name . "!, we will contact you shortly.</div>";  
?>

попробуйте это вы можете решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...