Добрый вечер! Требуется передать POST через Ajax на туже страницу. При этом var_dump($_POST); показывает пустой массив. Что не так делаю? Файл report1.php Код (Text): echo(" <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'> <html> <head> <title>Отчет </title> <script src='Chart.min.js'></script> <script src='js/jquery-1.11.1.min.js' type='text/javascript'></script> <script src='js/jquery.form.js' type='text/javascript'></script> <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'> </script> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>"); $script = '<script type="text/javascript"> function AjaxFormRequest(result_id,form_id,url) { jQuery.ajax({ url: url, type: "POST", dataType: "html", data: jQuery("#"+form_id).serialize(), success: function(response) { alert (response); $("#"+result_id).html(response); }, error: function(data) { //document.getElementById(result_id).innerHTML = "Ошибка"; } }); } </script>'; echo($script); $form = '<br> <form id="form_id1" action="" enctype="multipart/form-data" target="_top" method="post"> <input class="btn1" type="button" value="Показать" onclick="AjaxFormRequest(\'result_div_id1\', \'form_id1' . '\', \'report1\')" /> <input name="b_date" type="date"> <input name="e_date" type="date"> </form></div><br>'; echo $form; //If (!empty($_POST("b_date"))) var_dump($_POST); echo "<div id='result_div_id1'> </div>";
для приличия бы сначала оформил код в соответствующий тег для подсветки пхп и соблюдал табуляцию в своем документе. На данный момент твой код определяется как
PHP: echo(" <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'> <html> <head> <title>Отчет </title> <script src='Chart.min.js'></script> <script src='js/jquery-1.11.1.min.js' type='text/javascript'></script> <script src='js/jquery.form.js' type='text/javascript'></script> <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'> </script> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>"); $script = '<script type="text/javascript"> function AjaxFormRequest(result_id,form_id,url) { jQuery.ajax({ url: url, type: "POST", dataType: "html", data: jQuery("#"+form_id).serialize(), success: function(response) { alert (response); $("#"+result_id).html(response); }, error: function(data) { //document.getElementById(result_id).innerHTML = "Ошибка"; } }); } </script>'; echo($script); $form = '<br> <form id="form_id1" action="" enctype="multipart/form-data" target="_top" method="post"> <input class="btn1" type="button" value="Показать" onclick="AjaxFormRequest(\'result_div_id1\', \'form_id1' . '\', \'report1\')" /> <input name="b_date" type="date"> <input name="e_date" type="date"> </form></div><br>'; echo $form; //If (!empty($_POST("b_date"))) var_dump($_POST); echo "<div id='result_div_id1'> </div>"; --- Добавлено --- теперь ответы будут?
отладкой надо заниматься пустой $_POST вы где видите? Смотрите в консоли - ajax запросы, что передает там видно, и ответ там-же видно есть сомнения в параметре url, куда вы передаете ajax запрос, у вас это report1 .... верный путь?
@shtrih вот так PHP: <?php if( isset( $_POST['b_date'], $_POST['e_date'] ) ) { $result = [ $_POST['b_date'], $_POST['e_date'] ]; echo json_encode($result); die(); } ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Отчет</title> </head> <body> <form id="form_id1" action="#" method="post"> <button type="submit" class="btn btn-primary">Показать</button> <input name="b_date" type="date"> <input name="e_date" type="date"> </form> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script> $("#form_id1").submit(function(e) { e.preventDefault(); var form = $(this); var url = form.attr('action'); //урл указанный в форме $.ajax({ type: "POST", url: url, data: form.serialize(), // вся информация с формы success: function(data) { alert(data); } }); }); </script> </body> </html>
var_dump($_POST); - в этой строке. название файла указано верно. В отладке я вижу, что данные передаются. В Response в отладке я вижу, что var_dump($_POST) отдаётся. А почему у меня на странице он не отдается? Похоже я, что-то не понимаю
@shtrih Если хотите меньше кода, ajax запрос можно так записать Код (Javascript): $("#form_id1").submit(function(e) { e.preventDefault(); let form = $(this), url = form.attr('action'); $.post( url, form.serialize(), function( data ) { alert( data ); }, "json"); });
Занёс ваш код. alert - выводится. Как сделать, чтобы echo $_POST['b_date']; в окне браузера вывелось?
Вот видимо с этим я что-то не понимаю $("#result_div_id1").html(data); Вставляю в script. И в этом блоке PHP: echo "<div id='result_div_id1'> "; var_dump($_POST); echo "</div>";
Еще подумайте, подсказка возвращается json, вторая подсказака, вот этого в html достаточно: HTML: <div id='result_div_id1'></div> отстаньте от команды echo
PHP: <?php if( isset( $_POST['b_date'], $_POST['e_date'] ) ) { $result = [ $_POST['b_date'], $_POST['e_date'] ]; echo json_encode($result); die(); } ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Отчет</title> </head> <body> <form id="form_id1" action="#" method="post"> <button type="submit" class="btn btn-primary">Показать</button> <input name="b_date" type="date"> <input name="e_date" type="date"> </form> <div id='result_div_id1'></div> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script> $("#form_id1").submit(function(e) { e.preventDefault(); let form = $(this), url = form.attr('action'); $.post( url, form.serialize(), function( data ) { $("#result_div_id1").html(data[0]); }, "json"); }); </script> </body> </html>
Ну обычно аякс у меня отдавал инфу другому скрипту и он возвращал json, с которым в текущем скрипте , у меня уже были обработки с помощью php. А тут задача такая, я отправляю этому же скрипту данные пост и внизу страницы вывожу таблицу из mysql, где участвуют переменные bdata и edata. Я конечно могу сформированную таблицу записать в json и вывести её, но это не правильно
Это как раз таки правильно, отправляйте дату на сервер, там делайте с ней что хотите, и возвращайте уже готовую. Я обычно делаю так: шапка таблицы как html HTML: <table class="table text-center" border="1" bordercolor="black"> <thead class="thead-dark"> <tr> <th>Код</th> <th>Номер работ</th> <th>Объект работ</th> <th>Начало (план)</th> <th>Окончание (план)</th> <th>Исполнитель</th> <th>Вид работы</th> <th>Выполнение</th> </tr> </thead> <tbody><?=$table?></tbody> </table> на сервере php PHP: //какая то обработка в цикле $result .= '<tr>'. '<td class="align-middle" align="center">'.$item['cod'].'</td>'. '<td class="align-middle">'.$item['nrab'].'</td>'. '<td class="align-middle">'.$item['objrab'].'</td>'. '<td class="align-middle">'.date('Y-m-d H:i:s', strtotime($item['nplan'])).'</td>'. '<td class="align-middle">'.date('Y-m-d H:i:s', strtotime($item['oplan'])).'</td>'. '<td class="align-middle">'.$item['ispoln'].'</td>'. '<td class="align-middle">'.$item['vidrab'].'</td>'. $input. '</tr>'; // вывод данных И если есть необходимость обновлять таблицу с помощью ajax просто обращаюсь к этой же функции Код (Javascript): postAjax('index.php?r=post/create-registration', a, function( data ) { var json = JSON.parse( data ); if( json !== false ) { //вставляем в таблицу } });