Как сделать отправку ответа по json c этой формой?
Есть ajax форма обратной связи ,все работает хорошо,но как переделать чтобы скрипт отвечал в JSON (например status: success или status: false), а уже в jQuery-скрипте выводится HTML ответ на страницу ?
Я так понял нужно завести переменную,в нее буду получать статус(как?) и в зависимости от этого статуса буду выводить сообщение в скрипте js? smartlanding.biz/ajax-forma-v-modalnom-okne.html использовал эту форму. Попытался я сделать так файл mail.php <?php if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Если к нам идёт Ajax запрос, то ловим его if ($_SERVER["REQUEST_METHOD"] == "POST") { if (isset($_POST['name'])) {$name = $_POST['name'];} if (isset($_POST['phone'])) {$phone = $_POST['phone'];} if (isset($_POST['messages'])) {$messages = $_POST['messages'];} if (isset($_POST['formData'])) {$formData = $_POST['formData'];} $json = array(); // пoдгoтoвим мaссив oтвeтa if (!$name or !$phone or !$messages) { // eсли хoть oднo пoлe oкaзaлoсь пустым $json['error'] = 'Вы зaпoлнили нe всe пoля! oбмaнуть рeшили? =)'; // пишeм oшибку в мaссив echo json_encode($json); // вывoдим мaссив oтвeтa die(); // умирaeм } $to = "viktor242424@gmail.com"; /*Укажите адрес, га который должно приходить письмо*/ $sendfrom = "codabra@yandex.ru"; /*Укажите адрес, с которого будет приходить письмо, можно не настоящий, нужно для формирования заголовка письма*/ $headers = "From: " . strip_tags($sendfrom) . "\r\n"; $headers .= "Reply-To: ". strip_tags($sendfrom) . "\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html;charset=utf-8 \r\n"; $subject = "$formData"; $message = "$formData<br> <b>Имя пославшего:</b> $name <br><b>Телефон:</b> $phone <br><b>Сообщение:</b> $messages"; $send = mail ($to, $subject, $message, $headers); $json['error'] = 0; // oшибoк нe былo echo json_encode($json); // вывoдим мaссив oтвeтa } else { http_response_code(403); echo "Попробуйте еще раз"; } } //Если это не ajax запрос echo 'Ошибка!'; ?> файл со скриптом файл со скриптом $(document).ready(function () { $("form").submit(function () { // Получение ID формы var formID = $(this).attr('id'); // Добавление решётки к имени ID var formNm = $('#' + formID); $.ajax({ type: "POST", url: 'mail.php', dataType: 'json', // oтвeт ждeм в json фoрмaтe data: data, // дaнныe для oтпрaвки success: function(data){ // сoбытиe пoслe удaчнoгo oбрaщeния к сeрвeру и пoлучeния oтвeтa if (data['error']) { // eсли oбрaбoтчик вeрнул oшибку alert(data['error']); // пoкaжeм eё тeкст } else { // eсли всe прoшлo oк alert('Письмo oтврaвлeнo! Чeкaйтe пoчту! '); // пишeм чтo всe oк } }, }); return false; }); }); Немного запутался крч,решение тут простое как я понимаю |
Цитата:
Цитата:
|
INSIDER73, достаточно так:
if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { |
Rise,
если не выключен вывод предупреждений, то это вызовет его вывод в браузер. |
Браузеру, вестимо, то бишь перед JSON, коего ожидает клиент.
HTTP_X_ХХХХХ это вообще-то пользовательские заголовки, и благо что JQ и требуемый будет, а может то и не быть. И автор поступает правильно, используя проверку установления переменной, иначе можно получить предупреждение. И только если вывод предупреждений отключен не объявленная переменная будет равна NULL и все будет тихо. |
E_NOTICE - уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы.
И включен ли их вывод или нет, определяется только настройками сервера, а не по умолчанию. Какая разница вообще чего вы получите, факт в том, что можно получить, и это не являющееся ошибкой в программе, вызовет дальнейшую ошибку уже на клиенте. Поэтому он поступается правильно. Хотя, если контролируем сервер, то все отключаем и пишем в лог, тогда и можно спокойно echo $asd, хотя она может быть и не определена. |
Причем тут php.ini руководства?
Смотреть надо настройки реального сервера, а они изначально определяются хостером, а не мануалом. Я не использую isset() везде и вся ибо привык контролировать код и настройки сервера, которые многие можно переопределять. И могу сказать из опыта, что на многих "по умолчанию" будет вывод и уведомлений и предупреждений, не говоря уже об ошибках (фатальные конечно иной вопрос). Он поступает правильно, хотя бы уже потому, что видимо не знает о таком поведении РНР. |
А причем тут имена и пароли?
Не надо лить все в одну лужу. Автор топика поступает правильно, узнавая наличие переменной, а затем обращаясь к ней. Вы советуете, что можно проще. Можно, но надо пояснять когда это возможно делать не вызывая возможных уже ошибок. Кроме того нужно знать, что переменные могут быть переопределены извне, поэтому поступая проще в особо щекотливых ситуациях необходим строгий контроль. Вы же просто начинаете перегибать палку. ;) |
Rise,
не надо ерунды городить, хорошо? :) |
Часовой пояс GMT +3, время: 00:29. |