Не получается отправить форму с калькулятора
Здравствуйте!
Скопировал с одного сайта Wordpress на другой калькулятор. Все работает, за исключением отправки формы. <form method="post" action="/wp-content/themes/xmag-child/calc/mail.php?go=quick" id="form_888"> <h3>Калькулятор стоимости</h3> <div class="pole_calc inline-str"><input type="tel" class="valid" name="sq" id="sq" style="width:73px" placeholder=" 60-3000" /><label>Площадь (кв.м.)</label></div> <div class="pole_calc inline-str"><input type="tel" name="th" class="valid" id="th" style="width:73px" placeholder=" 50-150" /><label>Толщина (мм)</label></div> <div class="pole_calc inline-str"><input type="tel" name="et" id="et" style="width:50px" class="valid" placeholder=" 1-25" /><label>Этаж</label></div> <p>Местоположение объекта: <input type="text" name="dst" id="dst" style="width:187px" class="valid" placeholder=" Населенный пункт" required/> </p> <input type="hidden" name="contact_subject" value="Предварительный расчет стоимости стяжки" /> <input type="button" id="calk" style="display: inline-block !important;text-align: center;border-radius: 4px;background: #FF5100;; width:190px; height:41px; border:none;cursor:pointer;color:#fff;" value="Расчет стоимости"/> <input type="reset" style="display: inline-block !important;text-align: center;border-radius: 4px;background: #20AA73;; width:150px; height:41px; border:none;cursor:pointer;color:#fff;" value="Очистить"/> <p>Итого:</p><b><input type="text" id="results" name="price" value="" readonly /></b> <p>Отправить расчет на свою почту:</p> <input type="email" name="useremail" id="calc_email" value="" required/> <input type="button" class="button" value="Отправить" id="button_888"/> </form> jQuery(function(){ //... функции расчетов самого калькулятора пропускаю - оставил только нажатие на кнопку отправить... jQuery('#button_888').click(function(){ if(Valid()){ if(obrCalc()){ var json = { area: jQuery('#sq').val(), aver_thick_screed: jQuery('#th').val(), floor: jQuery('#et').val(), Location_of_object: jQuery('#dst').val(), summa: jQuery('#results').val(), my_mail: jQuery('#calc_email').val() }; jQuery.post('/wp-content/themes/xmag-child/calc/mail.php',json,function(data){ data = JSON.parse(data); console.log(data); if(data['status']=='1'){ alert('Ваш заказ принят, спасибо!'); } }); } } }); }); При нажатии на кнопку "Отправить" ничего не происходит, в консоле после нажатия кнопки вижу ошибку: "(index):322 Uncaught ReferenceError: Valid is not defined". Пробовал убрать if(Valid()){} - тогда "Uncaught SyntaxError: Unexpected token o" Возможно, это из-за версии jQuery? Как исправить? |
кажется понял - там еще в другом файле всякие функции js прописаны... :)
сейчас попробую разобраться "методом" тыка... ( |
Функции Valid и obrCalc имеются или просто скопирован код чужой?
Отправлять как var json = { area: jQuery('#sq').val() .... так принципиально? Тогда почему не просто $(form).serializeArray()? data = JSON.parse(data); - тут либо проверка нужна, что да, положительно, либо определите тип данных ожидаемых у метода post(), в случае ошибки data ничего не вернет, иначе готовый объект. |
нашел функцию Valid в другом файле (функция obrCalc тоже имеется)
теперь письма отправляются, но не появляется сообщение об успешной отправке (Ваш заказ принят, спасибо!)... и в консоле: "Uncaught SyntaxError: Unexpected token o" |
Значит сервер вернул не json.
|
Цитата:
|
Цитата:
JSON, значит можно вернуть сообщения об ошибках ввода в конкретных полях формы, что и обязан делать сервер - проверять полученные данные. У вас этого нет, а проверка на клиенте, это лажа для сервера. Так что разберитесь сначала чего вы делаете на сервере. |
Цитата:
|
Зачем тогда копируете чужое, да еще не понимая что к чему. И какую вам подсказочку можно дать не имея понятия что происходит на сервере?
Вот это к примеру input type="tel" class="valid" name="sq" id="sq" но area: jQuery('#sq').val() для чего? Это кто такое придумал, вы или же скопировано так? Почему тогда не сразу name="area" и отправлять форму обрабатывая это событие? Сервер хоть ожидает area или ...? Valid() и obrCalc() для сервера пустой звук, он об этом не знает. Хотите получать почту, значит проверяйте форму на сервере, реагируйте на ошибки заполнения. А вариантов диалога клиент-сервер может быть множество, все их как примеры перечислять зачем, чтобы вы их как это код копировали "как есть" и "а че не работает?". |
Цитата:
Передо мной стоит задача - перенести готовый калькулятор (не украденный, а сделанный на заказ) с одного сайта на другой и немного переработать внешний вид. Калькулятор состоит из двух файлов, насколько я понимаю calc.php и mail.php (собственно сама отправка почты) calc.php (туда же перенес функцию Valid(), которая была в отдельном js файле: <form method="post" action="/wp-content/themes/xmag-child/calc/mail.php?go=quick" id="form_888"> <h3>Калькулятор стоимости</h3> <div class="pole_calc inline-str"><input type="tel" class="valid" name="sq" id="sq" style="width:73px" placeholder=" 60-3000" /><label>Площадь (кв.м.)</label></div> <div class="pole_calc inline-str"><input type="tel" name="th" class="valid" id="th" style="width:73px" placeholder=" 50-150" /><label>Толщина (мм)</label></div> <div class="pole_calc inline-str"><input type="tel" name="et" id="et" style="width:50px" class="valid" placeholder=" 1-25" /><label>Этаж</label></div> <p>Местоположение объекта: <input type="text" name="dst" id="dst" style="width:187px" class="valid" placeholder=" Населенный пункт" required/> </p> <input type="hidden" name="contact_subject" value="Предварительный расчет стоимости стяжки" /> <input type="button" id="calk" style="display: inline-block !important;text-align: center;border-radius: 4px;background: #FF5100;; width:190px; height:41px; border:none;cursor:pointer;color:#fff;" value="Расчет стоимости"/> <input type="reset" style="display: inline-block !important;text-align: center;border-radius: 4px;background: #20AA73;; width:150px; height:41px; border:none;cursor:pointer;color:#fff;" value="Очистить"/> <p>Итого:</p><b><input type="text" id="results" name="price" value="" readonly /></b> <p>Отправить расчет на свою почту:</p> <input type="email" name="useremail" id="calc_email" value="" required/> <input type="button" class="button" value="Отправить" id="button_888"/> </form> <script type="text/javascript"> jQuery(function(){ jQuery('.trigger#trigger .t').text('Калькулятор'); jQuery('#calk').click(function(){ obrCalc(); }); var obrCalc = function(){ var sq = jQuery('#sq').val(); var th = jQuery('#th').val(); var et = jQuery('#et').val(); var dst = jQuery('#dst').val(); var k1 = 0; var k2 = 0; var k3 = 0; var checkErr = false; var x = 1; var y = 0; var z = 0; /*проверка ввода*/ if ((sq == 0)||(th == 0)||(et == 0)){ alert('Необходимо указать все размеры!'); return; } if (isNaN(sq) || isNaN(th) || isNaN(et)){ alert('Введите число!'); return; } //..здесь всякие расчеты - убрал что бы место не занимало function Valid(){ res = true; jQuery('form#form_888 input.valid').each(function(){ if ( jQuery(this).val() == '') { jQuery(this).addClass('novalid'); jQuery(this).addClass('animated'); jQuery(this).addClass('shake'); res = false; } }); return res; }; function SayHello(){ if( Valid() ) { jQuery('.trigger.active').trigger('click'); var th = jQuery('form#form_888'); jQuery.ajax({ type: "POST", url: "/wp-content/themes/xmag-child/calc/mail.php", //Change data: th.serialize() }).done(function() { // ThsPopUp(true); swal("Благодарим за заявку!", "Просчет отправлен на вашу почту!", "success"); }); return false; } }; jQuery('.fa.fa-times').click(function(){ ThsPopUp(false); }); jQuery('#button_888').click(function(){ if(Valid()){ if(obrCalc()){ var json = { area: jQuery('#sq').val(), aver_thick_screed: jQuery('#th').val(), floor: jQuery('#et').val(), Location_of_object: jQuery('#dst').val(), summa: jQuery('#results').val(), my_mail: jQuery('#calc_email').val() }; jQuery.post('/wp-content/themes/xmag-child/calc/mail.php',json,function(data){ data = JSON.parse(data); console.log(data); if(data['status']=='1'){ alert('Ваш заказ принят, спасибо!'); } }); } } }); }); </script> mail.php: <?php /* * Contact Form Class */ header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); $admin_email = "mail@mail.ru"; // Your Email $message_min_length = 1; // Min Message Length class Contact_Form{ function __construct($details, $email_admin){ $this->area = trim(stripslashes($details['area'])); $this->aver_thick_screed = trim(stripslashes($details['aver_thick_screed'])); $this->floor = trim(stripslashes($details['floor'])); $this->Location_of_object = trim(stripslashes($details['Location_of_object'])); $this->summa = trim(stripslashes($details['summa'])); $this->my_mail = trim(stripslashes($details['my_mail'])); $this->subject = "Заказ с калькулятора!"; // Subject $this->message = "<h1>Данные отправителя</h1> <div style='font: 14px \"trebuchet ms\";'> <br> Площадь помещения (кв.м.): <b>".$this->area."</b> <br> Средняя толщина стяжки (мм): <b>".$this->aver_thick_screed."</b> <br> Этаж: <b>".$this->floor."</b> <br> Местоположение объекта: <b>".$this->Location_of_object."</b> <br> Итого: <b>".$this->summa."</b> <br> Почта отправителя: <b>".$this->my_mail."</b> </div>"; $this->email_admin = $email_admin; $this->response_status = 1; $this->response_html = "Ваша заказ принят!"; } private function sendEmail(){ $mail = mail($this->email_admin, $this->subject, $this->message, "From: Teeth\r\n" ."Content-type: text/html; charset=utf-8\r\n" ."Reply-To: ".$this->contact."\r\n" ."X-Mailer: PHP/" . phpversion()); $mail2 = mail($this->my_mail, $this->subject, $this->message, "From: Teeth\r\n" ."Content-type: text/html; charset=utf-8\r\n" ."Reply-To: ".$this->contact."\r\n" ."X-Mailer: PHP/" . phpversion()); if($mail) { $this->response_status = 1; $this->response_html = $this->message; } } function sendRequest(){ if($this->response_status) { $this->sendEmail(); } $response = array(); $response['status'] = $this->response_status; $response['html'] = $this->message; echo json_encode($response); } } $contact_form = new Contact_Form($_POST, $admin_email); $contact_form->sendRequest(); ?> |
Часовой пояс GMT +3, время: 19:36. |