За последние 24 часа нас посетили 22411 программистов и 1147 роботов. Сейчас ищут 677 программистов ...

Как избежать перезагрузки страницы при клике на кнопку?

Тема в разделе "PHP для новичков", создана пользователем RD1824, 18 сен 2019.

Метки:
  1. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0
    Ребятки, я снова к вам, за советом. Задавала до этого 1 единственный вопрос, мне ответили - моему счастью не было предела, так как ошибка была найдена, очень надеюсь на ваши светлые умы. Только изучаю js, поэтому есть огромные пробелы, точнее один огромный пробел и кусочками знания появляются.

    Суть дела:
    У меня есть возможность на странице загрузить фалы, они загружаются без перезагрузки. Далее, есть кнопка которая отправляет эти загруженные файлы на почту, файлы во вложении. Все работает. Но при клике на кнопку "Отправить файлы заказчику", происходит перезагрузка страницы. Как избежать перезагрузки?
    Скрин для понимания http://prntscr.com/p7kgqy Как это выглядит

    Код кнопки для отправки файлов
    HTML:
    1.  <button class="btn btn-success" id="btn_submit" type="submit">Отправить файл(ы) заказчику</button>
    Событие на кнопку "Отправить файлы" на js (все отлично отправляется в файл send_file_to_mail.php)
    Код (Javascript):
    1. <script>
    2.         $(document).ready(function(){
    3.             $('#btn_submit').click(function(){
    4.                 // собираем данные с формы
    5.                 var zakaz_id=$('#zakaz_id').val();
    6.                 var comment_call=$('#comment_call').val();
    7.                 var mail=$('#mail').val();
    8.              
    9.                 // отправляем данные
    10.                 $.ajax({
    11.                     url: "send_file_to_mail.php", // куда отправляем
    12.                     type: "post", // метод передачи
    13.                     dataType: "json", // тип передачи данных
    14.                     data: { // что отправляем
    15.                         "zakaz_id": zakaz_id,
    16.                         "comment_call":comment_call,
    17.                         "mail":mail
    18.                     }
    19.                 });
    20.             });
    21.         });
    22.     </script>
    Код в файле send_file_to_mail.php
    PHP:
    1.     $msg_box = ""; // в этой переменной будем хранить сообщения формы
    2.     $errors = array(); // контейнер для ошибок
    3.     // проверяем корректность полей
    4.  
    5.     // если форма без ошибок
    6.     if(empty($errors)){    
    7.    
    8.         $ID= isset($_POST['zakaz_id'])?mysqli_real_escape_string($mysql, trim($_POST['zakaz_id'])):'';
    9.         $date = time();
    10.         $res = mysqli_query($mysql, " SELECT * FROM CRM_zakaz_file WHERE  CRM_zakaz_file.zakaz_id='".$ID."'") or  die(trigger_error(mysqli_error($mysql).' - zakaz_new_EDIT'));
    11.         while ($arr = mysqli_fetch_assoc($res))
    12.         {
    13.             $filename = '/путь/'.$arr['file']; //Имя файла для прикрепления
    14.             $to = $_POST['mail']; //Кому
    15.             $from = "мое название на латиницу"; //От кого
    16.             $subject = "Результаты анализов"; //Тема
    17.             $message = $_POST['comment_call']; //Текст письма
    18.             $boundary = "---"; //Разделитель
    19.             /* Заголовки */
    20.             $headers = "From: $from\nReply-To: $from\n";
    21.             $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
    22.             $body = "--$boundary\n";
    23.             /* Присоединяем текстовое сообщение */
    24.             $body .= "Content-type: text/html; charset='utf-8'\n";
    25.             $body .= "Content-Transfer-Encoding: quoted-printablenn";
    26.             $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n";
    27.             $body .= $message."\n";
    28.             $body .= "--$boundary\n";
    29.             $file = fopen($filename, "r"); //Открываем файл
    30.             $text = fread($file, filesize($filename)); //Считываем весь файл
    31.             fclose($file); //Закрываем файл
    32.             /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */
    33.             $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($filename)."?=\n";
    34.             $body .= "Content-Transfer-Encoding: base64\n";
    35.             $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n";
    36.             $body .= chunk_split(base64_encode($text))."\n";
    37.             $body .= "--".$boundary ."--\n";
    38.             mail($to, $subject, $body, $headers); //Отправляем письмо
    39.            
    40.               // выведем сообщение об успехе
    41.             $msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
    42.            
    43.             $query_count = "INSERT INTO CRM_HISTORY_SEND_FILE SET
    44.                                                zakaz_id='".$ID."',
    45.                                                file='".$arr['file']."',
    46.                                                message='".$_POST['comment_call']."',
    47.                                                mail='".$_POST['mail']."',
    48.                                                time='".$date."'";
    49.                                                
    50.             mysqli_query($mysql,$query_count) or die('Ошибка добавления CRM_HISTORY_SEND_FILE');
    51.             $id = mysqli_insert_id($mysql);
    52.            
    53.            
    54.       }
    55.       die ("<meta http-equiv=refresh content='0; url=?page=zakaz_new&add=1&edit=$ID'>");
    56.        
    57.     }
    58.     else
    59.     {
    60.         // если были ошибки, то выводим их
    61.         $msg_box = "";
    62.         foreach($errors as $one_error){
    63.             $msg_box .= "<span style='color: red;'>$one_error</span><br/>";
    64.         }
    65.     }
    66.     // делаем ответ на клиентскую часть в формате JSON
    67.     echo json_encode(array(
    68.         'result' => $msg_box
    69.     ));
    Итог: Файлы на почте, все хорошо, но перезагрузка при клике на кнопку "Отправить файлы". Как избегается перезагрузка, по моей логике ее не должно быть, я ведь отправляю методом ajax.
    Подскажите пожалуйста.
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Собирайте данные с формы так:
    Код (Javascript):
    1. $("#idForm").submit(function(e) {  //указать вашу форму
    2.     e.preventDefault(); // отменит перезагрузку
    3.     var form = $(this);
    4.     var url = form.attr('action'); //урл указанный в форме
    5.     $.ajax({
    6.            type: "POST",
    7.            url: url,
    8.            data: form.serialize(), // вся информация с формы
    9.            success: function(data)
    10.            {
    11.        
    12.            }
    13.          });
    14. });
     
  3. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0

    Взяла ваш код и сделала так.
    var url = form.attr('action'); //здесь не знаю, что вставить, так как нет формы в этом блоке, есть одна огромная форма, которая содержит все данные страницы, помимо отправки на почту данных, у меня на этой странице есть данные клиента, данные заказа. Вот как выглядит вся страница http://prntscr.com/p7kpll


    Код (Javascript):
    1.  <script>
    2.         $("#btn_submit").submit(function(e) {  //указать вашу форму
    3.         e.preventDefault(); // отменит перезагрузку
    4.             var form = $(this);
    5.             var url = form.attr('action'); //??????
    6.             var zakaz_id=$('#zakaz_id').val();
    7.             var comment_call=$('#comment_call').val();
    8.             var mail=$('#mail').val();
    9.         $.ajax({
    10.             type: "POST",
    11.             url: "send_file_to_mail.php",
    12.             data: form.serialize(), // вся информация с формы
    13.             success: function(data)
    14.             {
    15.                 "zakaz_id": zakaz_id,
    16.                 "comment_call":comment_call,
    17.                 "mail":mail
    18.        
    19.             }
    20.             });
    21. });
    22.     </script>
    Раздел Файлы клиента выглядит так
    HTML:
    1. <!--  Файлы клиента -->
    2.                  
    3.                         <fieldset id="form-p-0" role="tabpanel" aria-labelledby="form-h-0" class="body current" aria-hidden="false">
    4.                             <div class="grayclass col-lg-12">
    5.                                 <h2><strong>Файлы заказчика</strong></h2>
    6.                                 <?php
    7.                                if (isset($_GET['edit']) AND !empty($_GET['edit']))
    8.                                {
    9.                                ?>
    10.                                 <div class="col-lg-8">
    11.                                     <div class="col-md-12 well well-sm">  
    12.                                        
    13.                                         <iframe width="100%" id="frame1" style="min-height:440px;" class="embed-responsive-item autoHeight" seamless src="https://<?php echo $_SERVER['HTTP_HOST']; ?>/programm_files/<?php echo isset($arr['id'])?'pozaddfile_edit_new.php?zakaz_id='.$arr['id'].'&poz_id=0': 'pozaddfile_new.php?file=file'; ?>" frameborder="0" allowfullscreen scrolling="yes">
    14.                                         </iframe>
    15.                                     </div>
    16.                                 </div>
    17.                                 <div class="col-lg-4">
    18.                                     <textarea autocomplete="off" name="comment_call" id="comment_call" class="form-control" rows="2"> Добрый день, <?php echo isset($arr['client'])?$arr['client']:'';?>. Результаты Ваших анализы готовы.
    19.                                     </textarea>
    20.                                      <p class="smallsh">  Файл будет отправлен на почту заказчика: <?php echo isset ($arr['mail'])?$arr['mail']:''; ?> </p>
    21.                                     <br>
    22.                                    
    23.                                     <button class="btn btn-success" id="btn_submit" type="submit">Отправить файл(ы) заказчику</button>
    24.                                     <div class="clearfix mtop"></div>
    25.                                      <br><strong class="hist_file"> История отправки файлов </strong>
    26.                                    
    27.                                     <?php
    28.                                  
    29.                                    $s=1;
    30.                                    $resultf = mysqli_query($mysql, "SELECT * FROM CRM_HISTORY_SEND_FILE WHERE CRM_HISTORY_SEND_FILE.zakaz_id='". intval($_GET['edit']) ."' ") or  die(trigger_error(mysqli_error($mysql).' - CRM_HISTORY_SEND_FILE'));
    31.                                    while ($arr_file = mysqli_fetch_assoc($resultf))
    32.                                    {
    33.                                    ?>
    34.                                  
    35.                                     <p> <?php echo (isset($arr_file['time']) AND !empty($arr_file['time']))?$s.') '.date('d.m.y H:m',$arr_file['time']):'';?>
    36.                                     <?php echo isset($arr_file['file'])?' <strong>Файл: </strong>'.$arr_file['file']:'';?>
    37.                                     <?php
    38.                                    $s++;
    39.                                    }
    40.                                    mysqli_free_result($resultf);
    41.                                  
    42.                                    ?>
    43.                                 </div>
    44.                                 <?php
    45.                                }
    46.                                ?>
    47.                            
    48.                         </fieldset>
    49.                  
    50.                     <hr>
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Код (Javascript):
    1. <script>
    2.         $(document).ready(function(){
    3.             $('#btn_submit').click(function(e){
    4.                  e.preventDefault();
    5.                 // собираем данные с формы
    6.                 var zakaz_id=$('#zakaz_id').val();
    7.                 var comment_call=$('#comment_call').val();
    8.                 var mail=$('#mail').val();
    9.            
    10.                 // отправляем данные
    11.                 $.ajax({
    12.                     url: "send_file_to_mail.php", // куда отправляем
    13.                     type: "post", // метод передачи
    14.                     dataType: "json", // тип передачи данных
    15.                     data: { // что отправляем
    16.                         "zakaz_id": zakaz_id,
    17.                         "comment_call":comment_call,
    18.                         "mail":mail
    19.                     }
    20.                 });
    21.             });
    22.         });
    23.     </script>
     
  5. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    498
    Симпатии:
    57
    зачем из ajax ты предаешь json , если в обработчике даже не думаешь его не декодировать?

    Если в ajax ты прописал dataType json , то в обработчик отправится json.
     
  6. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0
    Таким образом тоже пробовала, но перезагрузка сохраняется и файл вообще не отправляется((
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    в консоле что выводит, до отправки аякса?
     
  8. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    console.log посмотри что там
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    Код (Javascript):
    1. $( 'body' ).on( 'submit', 'form', function ( e )
    2. {
    3.     e.preventDefault();
    4.    
    5.     var obj = new FormData( $( this ).get(0) );
    6.    
    7.     $.ajax(
    8.     {
    9.         url: $( this ).attr( 'action' ),
    10.         type: $( this ).attr( 'method' ),
    11.         contentType: false,
    12.         processData: false,
    13.         data: obj,
    14.         dataType: 'JSON',
    15.         success: function ( json )
    16.         {
    17.            
    18.             # действие при успехе
    19.         }
    20.     });
    21. })
    После не нужно над каждой строчкой комментировать вопросами. Есть Поисковик, есть документация.
     
  10. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    Кнопку с type="submit" и полями "накрой" формой, т.е.
    HTML:
    1. <form method="POST" onsubmit="return false;">
    2. <!--Поля для заполнения-->
    3. <button class="btn btn-success" id="btn_submit" type="submit">Отправить файл(ы) заказчику</button>
    4. </form>
    Либо просто
    HTML:
    1. <button class="btn btn-success" id="btn_submit" type="button">Отправить файл(ы) заказчику</button>
    А здесь dataType:"json" - лишнее.
    Код (Javascript):
    1. $(document).ready(function(){
    2.             $('#btn_submit').click(function(){
    3.                 // собираем данные с формы
    4.                 var zakaz_id=$('#zakaz_id').val();
    5.                 var comment_call=$('#comment_call').val();
    6.                 var mail=$('#mail').val();
    7.            
    8.                 // отправляем данные
    9.                 $.ajax({
    10.                     url: "send_file_to_mail.php", // куда отправляем
    11.                     type: "post", // метод передачи
    12.                     data: { // что отправляем
    13.                         "zakaz_id": zakaz_id,
    14.                         "comment_call":comment_call,
    15.                         "mail":mail
    16.                     }
    17.                 });
    18.             });
    19.         });
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    с формой надо работать как с обычной формой и не нужно драть из нее элементы по частям. Мой код ко всем стандартным формам идет, даже с
    +
    дальнейшее использование контента после переработки js скриптом

    вполне не лишнее, нужно вернуть отметку что все ок и по 20 раз больше не жать и т.д.
    --- Добавлено ---