Как мне заставить работать мою электронную почту AJAX в Wordpress - PullRequest
0 голосов
/ 11 декабря 2011

Добрый день,

У меня очень неприятная проблема. В настоящее время я пытаюсь использовать функцию AJAX для отправки электронного письма из контактной формы на моем сайте Wordpress. Он отправляет электронное письмо только тогда, когда ни одно из полей не было заполнено, но с момента, когда я пытаюсь отправить данные в полях формы, электронное письмо не отправляется.

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

Вот мой код ниже. Простите за то, что на данный момент нет ошибок или обработки спама:

Это Javascript:

        $(document).ready(function(){
        $('#emailform').submit(function(){

            window.open('','',"width=500,height=150").document.write("Thank you for contacting us, we will reply you shortly. Thank you!");

            // getting all the stuff from the form
            var form = $(this),
            formData = form.serialize(),
            formUrl = form.attr('action'),
            formMethod = form.attr('method'),
            emailresponse = $('#emailresponse');

            // loading stuff
            emailresponse.fadeOut(200, function(){
                $(this).text("Message sent")
                .fadeIn(200)
            });


            // sending stuff to the server
            $.ajax({
                url: formUrl,
                type: formMethod,
                data: formData,
                success:function(data) {
                    //stuff to do when the ajax call is successful and complete

                    var responseData = $.parseJSON(data),
                        klass = '';

                    emailresponse.fadeOut(200, function(){
                        $(this).text(responseData.message)
                        .fadeIn(200);
                    });

                }
            })


            return false;
        })
    })

а это php

    if (isset($_GET['action'])) {

    if($_GET['action'] == 'email') {
        $name = $_POST['name'];
        $email = mysql_real_escape_string($_POST['email']);
        $message = $_POST['message'];

        $m1 = "Name of customer: " . $name . "\n";
        $m2 = "Customer's Email: " . $email . "\n";
        $m3 = "Message: " . $message;
        $emailmessage = $m1 . $m2 . $m3;

        mail('seedorf@me.com', 'Message from LUNASKYMODA.CO.UK contact page', $emailmessage);

        $data = array(  
                'status' => $status,  
                'message' => $message  
            );

        echo json_encode($data);

    exit;
    }
}

Веб-страница, о которой идет речь, http://lunaskymoda.co.uk/contact-us/

P.s, если написано "Отправлено сообщение", это не обязательно означает, что оно отправляет ... Все еще работает над этим.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Хорошо, у вас много чего происходит.Во-первых, это код jQuery (библиотека javascript), и ваш код пропускает точки с запятой повсюду.Попробуйте это:

$(document).ready(function(){
        $('#emailform').submit(function(){

            window.open('','',"width=500,height=150").document.write("Thank you for contacting us, we will reply you shortly. Thank you!");

            // getting all the stuff from the form
            var form = $(this);
            formData = form.serialize();
            formUrl = form.attr('action');
            formMethod = form.attr('method');
            emailresponse = $('#emailresponse');

            // loading stuff
            emailresponse.fadeOut(200, function(){
                $(this).text("Message sent")
                .fadeIn(200);
            });


            // sending stuff to the server
            $.ajax({
                url: formUrl,
                type: formMethod,
                data: formData,
                success:function(data) {
                    //stuff to do when the ajax call is successful and complete

                    var responseData = $.parseJSON(data);
                    // klass = ''; <--what is this? you don't define 'klass' anywhere

                    emailresponse.fadeOut(200, function(){
                        $(this).text(responseData.message)
                        .fadeIn(200);
                    });

                }
            });


            return false;
        });
    });

Во-вторых, как только я открываю ваш сайт, я получаю эту ошибку в консоли:

Uncaught TypeError: Object [object Object] has no method 'livequery' wp-e-commerce.js:273

Таким образом, на вашем сайте есть ошибки JavaScript, прежде чем вы даже отправите скрипт,Попробуйте очистить все ошибки, так как javascript может сломаться и вообще не работать, если в цепочке находятся ошибки выше.

В-третьих, когда я отправляю форму, я получаю эту ошибку:

POST http://lunaskymoda.co.uk/contact-us/?action=email 404 (Not Found)

Это может быть либо а) потому что ваш JS не работает из-за второй ошибки, либо б) потому что у вас все еще есть действия с HTML-формой, когда вы используете jQuery для обработки формы.Итак:

В-четвертых, измените тег формы с этого:

<form id="emailform" action="?action=email" method="post" accept-charset="utf-8" novalidate="novalidate">

на следующее:

<form id="emailform">

Все это должно привести вас на правильный путь.Устранение неполадок JS становится намного проще, когда вы смотрите в консоли на наличие ошибок.В Chrome просто щелкните правой кнопкой мыши в любом месте и нажмите «проверить элемент», затем нажмите «консоль».В FireFox загрузите дополнение «Firebug».Устранение неполадок JS без консоли похоже на работу в темноте.

0 голосов
/ 11 декабря 2011

Похоже, что параметр действия вашей контактной формы размещен неправильно.

Проверьте это для ref:

http://www.wp -themix.org / WordPress / как к надстройку а-JQuery-Ajax-контакт-форму к WordPress /

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