Почему этот ajax-вызов правильного сценария php ничего не возвращает? - PullRequest
1 голос
/ 11 августа 2011

У меня есть этот AJAX:

function sendMail () {
        $.post('php/sendMail.php', function(result){
            alert(result);
        })
    }

$('#submitContact').click(function(){
        sendMail();
    })

и этот PHP:

<?php

$trimmed = array_map('trim', $_POST);

$message = $trimmed['message'];
$email = $trimmed['email'];
$name = $trimmed['name'];

if (empty($message)) {
    $message = FALSE;
}

if (empty($email)) {
    $message = FALSE;
}

if (empty($name)) {
    $message = FALSE;
}

if ($message && $email && $name){

    $body = "From: $name.\n \n $message";

    mail(/*some email*/, 'Website Contact Form Submission', $body, "From: $email");

    echo ('success');

}

echo($message.' '.$email.' '.$name);

?>

Все определенные html-элементы существуют.Когда я запускаю его, все, что возвращает, - это пустое окно с предупреждением (это означает, что скрипт PHP не распечатал успех).Любая идея, почему он не отправляет почту?

Ответы [ 4 ]

4 голосов
/ 11 августа 2011

Вы, похоже, не отправляете никаких данных с вашим POST.

Если вы пытаетесь отправить форму, попробуйте это:

$.post('php/sendMail.php',$('form').serialize(), function(result){
        alert(result);
    })

Редактировать: Как правильно заметил Томалак в комментариях, вам нужно будет указать, какую форму вы сериализуете. Я бы обычно дал форму id и использовал бы это: - $('#myform').serialize()

1 голос
/ 11 августа 2011

Причина, по которой вы видите пустое окно оповещения, заключается в том, что $email и $name пусто, потому что вы не передали никакую переменную $_POST.
И $message = FALSE пусто, когда вы выводите его.1006 * Попробуйте изменить эту строку

echo($message.' '.$email.' '.$name);

На

var_dump($message.' '.$email.' '.$name);

И вы увидите значение $message.' '.$email.' '.$name.

1 голос
/ 11 августа 2011

Вы не отправляете данные на этот URL.

0 голосов
/ 11 августа 2011

Есть идеи, почему оно не отправляет почту?

Проще говоря, Вы не спрашивали его .


Синтаксис для $.post:

jQuery.post (url, [data,] [success (data, textStatus, jqXHR),] [dataType])

Как работает jQuery, вы можете пропустить аргумент data и по-прежнему предоставлять следующие, но в этом случае вы просто не передаете данные для работы с вашим PHP-скриптом.

Предполагая, что #submitContact является кнопкой в ​​форме, которую вы хотите отправить, вы должны сериализовать содержимое этой формы и отправить его в виде POST данных:

function sendMail($form) {
    $.post('php/sendMail.php', $form.serialize(), function(result) {
        alert(result);
    });
}

var $btn = $('#submitContact');
var $frm = $btn.parents('form');
$btn.click(function() {
    sendMail($frm);
});

документация твой друг. Используйте это.


( Примечание: $ в начале некоторых из моих переменных является преднамеренным; этоЛичный выбор, чтобы у объектов jQuery были имена, начинающиеся с $ в моем коде.)

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