За последние 24 часа нас посетил 21621 программист и 1029 роботов. Сейчас ищут 688 программистов ...

Запутался с POST и Ajax

Тема в разделе "JavaScript и AJAX", создана пользователем shtrih, 18 сен 2019.

  1. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    Добрый вечер!

    Требуется передать POST через Ajax на туже страницу.
    При этом var_dump($_POST); показывает пустой массив. Что не так делаю?


    Файл report1.php
    Код (Text):
    1.    echo("
    2.            <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
    3.            <html>
    4.            <head>
    5.          
    6.          
    7.                <title>Отчет  </title>
    8.                 <script src='Chart.min.js'></script>
    9.                <script src='js/jquery-1.11.1.min.js' type='text/javascript'></script>
    10.                <script src='js/jquery.form.js' type='text/javascript'></script>
    11.                <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'>
    12.                </script>
    13.              
    14.                <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
    15.  
    16.                $script = '<script type="text/javascript">
    17.  
    18.             function AjaxFormRequest(result_id,form_id,url) {
    19.                  jQuery.ajax({
    20.                     url:     url,
    21.                     type:     "POST",
    22.                     dataType: "html",
    23.                     data: jQuery("#"+form_id).serialize(),
    24.                     success: function(response) {
    25.                              alert (response);
    26.                             $("#"+result_id).html(response);
    27.                            
    28.                    
    29.                         },
    30.                                     error: function(data) {
    31.                             //document.getElementById(result_id).innerHTML = "Ошибка";
    32.                         }
    33.                    
    34.                                  });
    35.  
    36.                 }
    37. </script>';
    38.  
    39.  
    40. echo($script);
    41.  
    42. $form = '<br>
    43.                        <form id="form_id1" action="" enctype="multipart/form-data" target="_top" method="post">
    44.  
    45.                        <input class="btn1" type="button" value="Показать" onclick="AjaxFormRequest(\'result_div_id1\', \'form_id1' . '\', \'report1\')" />
    46.                        <input name="b_date" type="date">
    47.                         <input name="e_date" type="date">
    48.                        </form></div><br>';
    49. echo $form;
    50.  
    51. //If (!empty($_POST("b_date")))
    52. var_dump($_POST);
    53.  
    54. echo "<div id='result_div_id1'> </div>";
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    для приличия бы сначала оформил код в соответствующий тег для подсветки пхп и соблюдал табуляцию в своем документе. На данный момент твой код определяется как
    [​IMG]
     
  3. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    PHP:
    1. echo("
    2. <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
    3. <html>
    4. <head>
    5.  
    6.  
    7.    <title>Отчет  </title>
    8.    <script src='Chart.min.js'></script>
    9.    <script src='js/jquery-1.11.1.min.js' type='text/javascript'></script>
    10.    <script src='js/jquery.form.js' type='text/javascript'></script>
    11.    <script type='text/javascript'                         src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'>
    12.    </script>
    13.  
    14.    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
    15.     $script = '<script type="text/javascript">
    16.        function AjaxFormRequest(result_id,form_id,url) {
    17.            jQuery.ajax({
    18.                url:     url,
    19.                type:     "POST",
    20.                dataType: "html",
    21.                data: jQuery("#"+form_id).serialize(),
    22.                success: function(response) {
    23.                    alert (response);
    24.                    $("#"+result_id).html(response);
    25.  
    26.  
    27.                },
    28.                error: function(data) {
    29.                    //document.getElementById(result_id).innerHTML = "Ошибка";
    30.                }
    31.  
    32.            });
    33.        }
    34.    </script>';
    35.     echo($script);
    36.     $form = '<br>
    37.    <form id="form_id1" action="" enctype="multipart/form-data" target="_top" method="post">
    38.        <input class="btn1" type="button" value="Показать" onclick="AjaxFormRequest(\'result_div_id1\', \'form_id1' . '\', \'report1\')" />
    39.        <input name="b_date" type="date">
    40.        <input name="e_date" type="date">
    41.    </form></div><br>';
    42.     echo $form;
    43.     //If (!empty($_POST("b_date")))
    44.     var_dump($_POST);
    45.     echo "<div id='result_div_id1'> </div>";
    --- Добавлено ---
    теперь ответы будут?
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    отладкой надо заниматься
    пустой $_POST вы где видите?
    Смотрите в консоли - ajax запросы, что передает там видно, и ответ там-же видно

    есть сомнения в параметре url, куда вы передаете ajax запрос, у вас это report1 .... верный путь?
     
  5. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @shtrih вот так
    PHP:
    1. <?php
    2. if( isset( $_POST['b_date'], $_POST['e_date'] ) )
    3. {
    4.     $result = [
    5.         $_POST['b_date'],
    6.         $_POST['e_date']
    7.     ];
    8.     echo json_encode($result);
    9.     die();
    10. }
    11. ?>
    12. <!doctype html>
    13. <html lang="en">
    14.   <head>
    15.     <meta charset="utf-8">
    16.     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    17.     <title>Отчет</title>
    18.   </head>
    19.   <body>
    20.     <form id="form_id1" action="#" method="post">
    21.        <button type="submit" class="btn btn-primary">Показать</button>
    22.        <input name="b_date" type="date">
    23.        <input name="e_date" type="date">
    24.    </form>
    25.     <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    26.     <script>
    27.     $("#form_id1").submit(function(e)
    28.     {
    29.         e.preventDefault();
    30.         var form = $(this);
    31.         var url = form.attr('action'); //урл указанный в форме
    32.         $.ajax({
    33.             type: "POST",
    34.             url: url,
    35.             data: form.serialize(), // вся информация с формы
    36.             success: function(data)
    37.             {
    38.                     alert(data);
    39.             }
    40.         });
    41.     });
    42.     </script>
    43. </body>
    44. </html>
     
  6. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    var_dump($_POST); - в этой строке.
    название файла указано верно.

    В отладке я вижу, что данные передаются. В Response в отладке я вижу, что var_dump($_POST) отдаётся. А почему у меня на странице он не отдается? Похоже я, что-то не понимаю
     
  7. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @shtrih Если хотите меньше кода, ajax запрос можно так записать
    Код (Javascript):
    1. $("#form_id1").submit(function(e)
    2. {
    3.         e.preventDefault();
    4.  
    5.         let form = $(this),
    6.             url = form.attr('action');
    7.  
    8.         $.post( url, form.serialize(), function( data )
    9.         {
    10.             alert( data );
    11.         }, "json");
    12. });
     
  8. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    Занёс ваш код. alert - выводится. Как сделать, чтобы echo $_POST['b_date']; в окне браузера вывелось?
     
  9. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  10. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    Вот видимо с этим я что-то не понимаю

    $("#result_div_id1").html(data); Вставляю в script.


    И в этом блоке

    PHP:
    1. echo "<div id='result_div_id1'> ";
    2. var_dump($_POST);
    3. echo "</div>";
     
  11. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Еще подумайте, подсказка возвращается json, вторая подсказака, вот этого в html достаточно:
    HTML:
    1. <div id='result_div_id1'></div>
    отстаньте от команды echo
     
  12. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    С этой загадки я и начал. var_dump, echo или другое - это не важно
     
  13. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. <?php
    2. if( isset( $_POST['b_date'], $_POST['e_date'] ) )
    3. {
    4.     $result = [
    5.         $_POST['b_date'],
    6.         $_POST['e_date']
    7.     ];
    8.     echo json_encode($result);
    9.     die();
    10. }
    11. ?>
    12. <!doctype html>
    13. <html lang="en">
    14.   <head>
    15.     <meta charset="utf-8">
    16.     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    17.     <title>Отчет</title>
    18.   </head>
    19.   <body>
    20.      <form id="form_id1" action="#" method="post">
    21.        <button type="submit" class="btn btn-primary">Показать</button>
    22.        <input name="b_date" type="date">
    23.        <input name="e_date" type="date">
    24.     </form>
    25.     <div id='result_div_id1'></div>
    26.     <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    27.     <script>
    28.     $("#form_id1").submit(function(e)
    29.     {
    30.         e.preventDefault();
    31.         let form = $(this),
    32.             url = form.attr('action');
    33.         $.post( url, form.serialize(), function( data )
    34.         {
    35.             $("#result_div_id1").html(data[0]);
    36.         }, "json");
    37.     });
    38.     </script>
    39. </body>
    40. </html>
     
  14. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    Это получается. Но как обратится в блоке div к переменным b_date и e_date?
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    Ужасный вопрос. Как ты представляешь себе ?
     
  16. shtrih

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

    С нами с:
    10 дек 2015
    Сообщения:
    59
    Симпатии:
    3
    Ну обычно аякс у меня отдавал инфу другому скрипту и он возвращал json, с которым в текущем скрипте , у меня уже были обработки с помощью php.

    А тут задача такая, я отправляю этому же скрипту данные пост и внизу страницы вывожу таблицу из mysql, где участвуют переменные bdata и edata. Я конечно могу сформированную таблицу записать в json и вывести её, но это не правильно
     
  17. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Это как раз таки правильно, отправляйте дату на сервер, там делайте с ней что хотите, и возвращайте уже готовую.
    Я обычно делаю так:

    шапка таблицы как html
    HTML:
    1. <table class="table text-center" border="1" bordercolor="black">
    2.     <thead class="thead-dark">
    3.         <tr>
    4.             <th>Код</th>
    5.             <th>Номер работ</th>
    6.             <th>Объект работ</th>
    7.             <th>Начало (план)</th>
    8.             <th>Окончание (план)</th>
    9.             <th>Исполнитель</th>
    10.             <th>Вид работы</th>
    11.             <th>Выполнение</th>
    12.         </tr>
    13.     </thead>
    14.     <tbody><?=$table?></tbody>
    15. </table>
    на сервере php
    PHP:
    1. //какая то обработка в цикле
    2. $result .= '<tr>'.
    3.                         '<td class="align-middle" align="center">'.$item['cod'].'</td>'.
    4.                         '<td class="align-middle">'.$item['nrab'].'</td>'.
    5.                         '<td class="align-middle">'.$item['objrab'].'</td>'.
    6.                         '<td class="align-middle">'.date('Y-m-d H:i:s', strtotime($item['nplan'])).'</td>'.
    7.                         '<td class="align-middle">'.date('Y-m-d H:i:s', strtotime($item['oplan'])).'</td>'.
    8.                         '<td class="align-middle">'.$item['ispoln'].'</td>'.
    9.                         '<td class="align-middle">'.$item['vidrab'].'</td>'.
    10.                         $input.
    11.                     '</tr>';
    12. // вывод данных
    И если есть необходимость обновлять таблицу с помощью ajax просто обращаюсь к этой же функции
    Код (Javascript):
    1. postAjax('index.php?r=post/create-registration', a, function( data )
    2. {
    3.     var json = JSON.parse( data );
    4.  
    5.     if( json !== false )
    6.     {
    7.         //вставляем в таблицу
    8.     }
    9. });