Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2016, 19:57   #1
nipopadyuk
Новичок
Джуниор
 
Аватар для nipopadyuk
 
Регистрация: 29.07.2010
Сообщений: 2
По умолчанию проблема с отловом POST запроса

Прошу помочь с проблемой.
Есть 2 формы обратной связи, есть 2 скрипта обработчика, и есть два скрипта на ajax которые ловят кнопку "отправить" и выводят сообщения об успешной отправки.
В первом случае простая форма, 2 поля, все работает прекрасно:
Код HTML:
  <form action="index1.php" id="colback-1" method="POST">
        <input type="text" name="name" id="name" class="reveal-modal-colback-form-filed-1" value="Ваше Имя:*" onfocus="if (this.value == 'Ваше Имя:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваше Имя:*';}" /><br />
        <input type="text" name="phone" id="phone" class="reveal-modal-colback-form-filed-2" value="Телефон:*" onfocus="if (this.value == 'Телефон:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Телефон:*';}" /><br />
        <input type="submit" id="form-key-colback-1" value="" class="reveal-modal-colback-form-key-1" />
    </form>
PHP код:
 <?php
/* Здесь проверяется существование переменных */
  
if (isset($_POST['phone'])) {$phone $_POST['phone'];}
if (isset(
$_POST['name'])) {$name $_POST['name'];}
  if (isset(
$_POST['email'])) {$email $_POST['email'];}
/* Сюда впишите свою эл. почту */
$address "мыло";
/* А здесь прописывается текст сообщения, \n - перенос строки */
$mes "Тема: Заказ обратного звонка на сайте ФУТБОЛКИ В САМАРЕ\nТелефон: $phone\nИмя: $name";
/* А эта функция как раз занимается отправкой письма на указанный вами email */
$sub='Заказ'//сабж
$email='Заказ <vpluce.ru>'// от кого
$send mail ($address,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
ini_set('short_open_tag''On');
header('Refresh: 3; URL=index.html');
?>
Код:
$(document).ready(function () {

    $('#colback-1').bind('submit', function(con) {
      
        con.preventDefault();  
        var isFormValid = true;
      
        $('#colback-1 [type=text]').each(function(){
      
            var znach = $(this).val();
            var defZnach = $(this).prop('defaultValue');
           if (znach == defZnach) {
            $('#znach_no_colback-1').show()
            $('#znach_no_colback-1').text('Вы не заполнили обязательные поля!');
             isFormValid = false;
            
                }
                });
        
        if ( isFormValid == true ) {
          
            $.ajax({
            url: $(this).attr('action'),
            async:true,
            type: 'POST',
            data: $(this).serialize(),
            success: function(data){ $('#znach_colback_head-1').text(data)
                                        $('#znach_colback_text-1-1').text(data)
                                        $('#znach_colback_text-1-2').text(data);}
                  });
          
            $('#colback-1').ajaxComplete(function(){
                $('#colback-1').hide();
                $('#znach_no_colback-1').hide();
                $('#znach_colback-1').show()
                $('#znach_colback_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
                $('#znach_colback_text-1-1').text('Наши менеджеры свяжуться');
                $('#znach_colback_text-1-2').text('с Вами в ближайшее время.');
            });
            }
    });  

    $('#znach_no_colback-1').hide();
    $('#znach_colback-1').hide();
});
одежда для компьютерщиков http://mayki-futbolki.ru/shirts/internet.html
nipopadyuk вне форума Ответить с цитированием
Старый 14.06.2016, 19:57   #2
nipopadyuk
Новичок
Джуниор
 
Аватар для nipopadyuk
 
Регистрация: 29.07.2010
Сообщений: 2
По умолчанию

Во втором случае, форма сложнее, и отправляет файл, который выбирает пользователь на своем компьютере. если я убираю ajax код, то все работает, письмо уходит, и сразу идет редирект на скрипт обработчик. если оставить ajax, то при нажатии кнопки, появляется заглушка "ваша заявка отправлена", но по факту, скрипт не отрабатывается, и письмо не уходит.
Помогите пожалуйста сделать заглушку, и чтобы скрипт при этом обрабатывался.
Код HTML:
            <form action="index2.php" method="post" id="buklet-1" enctype="multipart/form-data">
            <input name="name"  type="text" class="snap-point-1-content-form-filed-1" value="Ваше Имя:*" onfocus="if (this.value == 'Ваше Имя:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваше Имя:*';}" />
            <input name="tel"  class="snap-point-1-content-form-filed-2" value="Телефон:*" onfocus="if (this.value == 'Телефон:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Телефон:*';}"  type="tel" />
            <input name="email"   class="snap-point-1-content-form-filed-3" value="E-mail:*" onfocus="if (this.value == 'E-mail:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'E-mail:*';}" />
            <textarea name="message" class="snap-point-1-content-form-filed-4" placeholder="
Если у тебя нет подходящего изображения, опиши что ты хочешь видеть на своей будущей футболке, и мы найдем решение абсолютно бесплатно!"></textarea>
            <input name="file"  type="file"  class="snap-point-1-content-form-key-1"  />
<br><br>
        <input value="Отправить" name="sendMail" type="submit" class="snap-point-1-content-form-key-1"  />

</form>
<?php
PHP код:
$to 'мыло';

if ( isset( 
$_POST['sendMail'] ) ) {
  
$name  substr$_POST['name'], 064 );
  
$tel substr$_POST['tel'], 064 );
  
$email   substr$_POST['email'], 064 );
  
$message substr$_POST['message'], 0250 );

  if ( !empty( 
$_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == ) {
    
$filepath $_FILES['file']['tmp_name'];
    
$filename $_FILES['file']['name'];
  } else {
    
$filepath '';
    
$filename '';
  }
  
$body "Имя:\r\n".$name."\r\n\r\n";
  
$body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
  
$body .= "E-mail:\r\n".$email."\r\n\r\n";
  
$body .= "Описание заказа:\r\n".$message;
  
send_mail($to$body$email$filepath$filename);

}




// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to$body$email$filepath$filename)
{
  
$subject 'Тестирование формы с прикреплением файла с сайта proverstka.com.ua';
  
$boundary "--".md5(uniqid(time())); // генерируем разделитель
  
$headers "From: ".$email."\r\n";  
  
$headers .= "MIME-Version: 1.0\r\n";
  
$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  
$multipart "--".$boundary."\r\n";
  
$multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  
$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  
$body $body."\r\n\r\n";
  
$multipart .= $body;
  
$file '';
  if ( !empty( 
$filepath ) ) {
    
$fp fopen($filepath"r");
    if ( 
$fp ) {
      
$content fread($fpfilesize($filepath));
      
fclose($fp);
      
$file .= "--".$boundary."\r\n";
      
$file .= "Content-Type: application/octet-stream\r\n";
      
$file .= "Content-Transfer-Encoding: base64\r\n";
      
$file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      
$file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  
$multipart .= $file."--".$boundary."--\r\n";
    
mail($to$subject$multipart$headers);
  
}
?> 
Код:
$(document).ready(function () {

    $('#buklet-1').bind('submit', function(con) {
       
        con.preventDefault();   
        var isFormValid = true;
                   var formData    = new FormData($("#buklet-1")[0]); 
                   
        $('#buklet-1 [type=text]').each(function(){
       
            var znach = $(this).val();
            var defZnach = $(this).prop('defaultValue');
           if (znach == defZnach) {
            $('#znach_no_buklet-1').show()
            $('#znach_no_buklet-1').text('Вы не заполнили обязательные поля!');
             isFormValid = false;
             
                }
                });
         
        if ( isFormValid == true ) {
           
            $.ajax({
            url: $(this).attr('action'),
            async:true,
            type: 'POST',

            data:  formData,
            mimeType:"multipart/form-data",
            contentType: false,
            cache: false,
            processData: false,           
            success: function(data){ $('#znach_buklet_head-1').text(data)
                                        $('#znach_buklet_text-1-1').text(data)
                                        $('#znach_buklet_text-1-2').text(data);}
                  });
           
            $('#buklet-1').ajaxComplete(function(){
                $('#buklet-1').hide();
                $('#znach_no_buklet-1').hide();
                $('#znach_buklet-1').show()
                $('#znach_buklet_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
                $('#znach_buklet_text-1-1').text('Наши менеджеры свяжуться');
                $('#znach_buklet_text-1-2').text('с Вами в ближайшее время.');
            });
            }
    });   

    $('#znach_no_buklet-1').hide();
    $('#znach_buklet-1').hide();
});
одежда для компьютерщиков http://mayki-futbolki.ru/shirts/internet.html
nipopadyuk вне форума Ответить с цитированием
Старый 16.06.2016, 20:30   #3
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Простой метод отправки файла аяксом: засунуть на страницу невидимый айфрейм и старгетится формой на него, html сам все отправит. Готовность можно узнать по onload айфрейма. Степень загрузки так не отследить, так что кури reader, в jQuery API отправки файла, насколько я знаю, до сих пор не включено.

п.с. я предпочитаю первый способ, он простой как пробка; но у нас на проекте еще до моего прихода было написано API для этого дерьма, так что тут уже юзаю его=). Ах, да, еще через айфрейм нельзя передать драганутые в окно файлы.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с возвращаемым контентом посте post запроса FLIER Работа с сетью в Delphi 12 16.05.2014 13:13
Проблема с плюсами при отправки Post запроса TIHttp vmilyoshin Работа с сетью в Delphi 7 13.05.2014 18:21
Проблема при отправке POST запроса nefakt Работа с сетью в Delphi 23 25.02.2014 10:41
Отправка post запроса drakonbc C# (си шарп) 1 24.07.2013 01:12
Проблема при выполнении POST запроса. MrFriman Работа с сетью в Delphi 3 14.02.2012 09:11