Что не так с моей контактной формой AJAX? (php mail ()) - PullRequest
0 голосов
/ 23 ноября 2010

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

Мой код jQuery:

var dataString = 'address=' + address + '&title=' + title + '&name=' + name + '&mail=' + mail + '&message=' + message;
jQuery.ajax({
    type: "POST",
    url: "sendmail.php",
    data: dataString,
    success: function () {
        alert(dataString);
        jQuery('#ok').html("<h2>Contact Form Submitted!</h2>")
    }
});
return false;

Комментарий - я используюпредупреждение, чтобы отобразить строку данных, и она показывает именно мою строку, кроме того, этот скрипт всегда завершается успешно и отображает «Форма отправки отправлена».

Теперь часть sendmail.php (я думаю, что здесь что-то не так):

// getting variables from form

$emailTo = trim($_POST['address']);
$subject = trim($_POST['title']);;
$name = trim($_POST['name']);
$emailFrom = trim($_POST['mail']);
$message = $_POST['message'];

// prepare email body text

$Body = "You have a message from: ";
$Body .= $name;
$Body .= "\n";
$Body .= "\n";
$Body .= $message;

// send prepared message

$sent = mail($emailTo, $subject, $Body);

//callback for jQuery AJAX

if ($sent){
  echo '';
}
else{}

Есть идеи?Я знаю, что я не обрезаю свое сообщение $, я это сделаю, но я отправляю только тестовые письма одним словом.

Все переменные приходят из формы HTML и таким образом регистрируются в скрипте jQuery - var address =$ ( "# CMail-адрес") вал ().,В любом случае, это не имеет никакого отношения к моей проблеме, так как я получаю хороший обратный вызов.

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

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Ваша функция обратного вызова должна иметь отношение к выводу из файла PHP.Вы просто предупреждаете об одной и той же строке в области видимости JavaScript.

    success: function(dataOut) {  
        alert(dataOut);    
        jQuery('#ok').html("<h2>Contact Form Submitted!</h2>")
}  

Конечно, вам нужен PHP, чтобы что-то повторить.Может быть так просто, как «отправлено» или «не отправлено», пока вы не уточните материал позже, или это может быть именно то сообщение, которое вы хотите отобразить.Также повторить что-то, прежде чем пытаться отправить почту.Это может помочь определить, что проблема заключается в отправке почты, а не в использовании ajax.

Как уже упоминал один из комментаторов, строки типа «? A = 1 & b = 2 & c = 3» могут работать для POST, но name/ значение пары {a: "cat", b: "dog"}, вероятно, лучший путь.Подобные строки - это стиль GET, поэтому, вероятно, кто-то еще спутал их ответ.

Я бы также порекомендовал функцию post в jQuery.$ .post и $ .get более просты и охватывают 90% типичного использования ajax (включая ваше!).$ .ajax в значительной степени подходит для особых случаев странностей

$.post("sendmail.php", 
       {address: address, title: title, name: name...}, 
       function(d) {alert(d); $("#ok").html("<h2>" + d + "</h2>");});

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

Что это такое, что не работает?Ваш PHP достигнут, но электронная почта не отправляется вообще?

0 голосов
/ 23 ноября 2010

это может быть немного выстрелом в темноте - но вы пытались отправить на другие адреса электронной почты? При отправке почты PHP используются заголовки сервера, отправляющего сообщение (например, apache). Поэтому, когда вы нажимаете «ОТПРАВИТЬ», функция mail () присоединяет сообщение «x-sender: apache».

SO Почтовые серверы не принимают почту от серверов, которые не прошли проверку подлинности.

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

РЕДАКТИРОВАТЬ - о, извините - вы это сказали. Попробуйте повторить запрос $ _REQUEST, чтобы убедиться, что вы отправляете все переменные правильно. положить print_r ($ _ REQUEST); умереть(); в send_mail.php просмотрите результаты.

OH! Кстати. переключи свой

$_POST

до

$_REQUEST

У меня была такая проблема раньше. Как и в случае с ответом «вниз», вы, возможно, не отправляете переменные POST, поскольку передаете параметры в формате GET.

 $emailTo = trim($_REQUEST['address']);
 $subject = trim($_REQUEST['title']);;
 $name = trim($_REQUEST['name']);
 $emailFrom = trim($_REQUEST['mail']);
 $message = $_REQUEST['message'];

также попробуйте

 print_r($_REQUEST); die();

чтобы увидеть, что это передается внутрь.

EDIT2:

В соответствии с вашим комментарием, посмотрите на это изображение, как вы бы использовали firebug image

0 голосов
/ 23 ноября 2010

Вы используете переменные $ _POST, но отправляете их методом GET ..

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