Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 22.11.2019, 03:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Разве сложно это понять - запрос самой страницы (GET), это "просьба" серверу получить ее. А на POST запрос клиент хочет получить ответом только "решение" сервера по данному запросу, вся страница ему не нужна, она ведь уже у клиента. Следовательно структура кода страницы должна быть таковой:

<?
//php код проверяющий, что пришел POST запрос
//если пришел, то выполняем что-то и отвечаем клиенту
//после чего ОБЯЗАТЕЛЬНО делаем выход:
exit;
//иначе после выполнения этого кода будет продолжен вывод в браузер всего,
//что расположено ниже этого кода, то есть, начиная с первого html тега и до конца    
?>
<!DOCTYPE html>
<html>
.....
</html>
Ответить с цитированием
  #12 (permalink)  
Старый 22.11.2019, 04:10
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="php.css">
    <title>Document</title>
</head>
<body>
    <div>
    <!-- <form action="php1.php" method ="post"> -->
    <!-- <p>Імя:</p><input type="text" name = "Fname">
    </br>
    <p>Прізвище:</p><input type="text" name = "Lname">
    </br> -->
    <!-- <p>Років:</p><input type="number" name = "Age">
    <input id="php"type ="submit" value ="Add to Data" name ="search">Go!</input>
    </form>
    </div> -->
    <!-- <button id="goP">GOOOOOO</button> -->
    <!-- <form action="php1.php" method="post" onsubmit="return false">
    </form>   -->
    <input type="submit" id="goP" name="nameOf" value="Go">
    <?php
$a = json_decode(file_get_contents('php://input'));

if($_SERVER['REQUEST_METHOD'] == 'POST') {

    var_dump($a);

}
?>
    </div>
    <!-- <script src="https://code.jquery.com/jquery-3.4.1.min.js"
  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
  crossorigin="anonymous"></script> -->
    <script src="php.js"></script>
</body>
</html>


Я вас понял,нужно было разместить в HTML,и я вижу что в консоле оно выводит инфу,но почему на самой странице оно не показывает её?
Ответить с цитированием
  #13 (permalink)  
Старый 22.11.2019, 04:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от vovaJsc
Я вас понял,нужно было разместить в HTML
Судя по коду, ничего вы не поняли.
Ответить с цитированием
  #14 (permalink)  
Старый 22.11.2019, 04:21
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

Тогда очень вас прошу обьясните,просто хочу правильно научиться
Я вижу что в консоли оно показывает результат запросабъ,но хочу через пхп выводить на страницу...
Ответить с цитированием
  #15 (permalink)  
Старый 22.11.2019, 04:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от vovaJsc
Тогда очень вас прошу обьясните
Как? Я вроде бы черным по белому написал какова должна быть структура кода страницы, большего тут не скажешь. Это еще хорошо, что клиент не ожидает json, а то бы ...
Ответить с цитированием
  #16 (permalink)  
Старый 22.11.2019, 05:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сохраните это код под любым именем и запустите его.

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    $headers = getallheaders();
    
    if($headers['Content-Type']=='application/json') {
        
        $data = file_get_contents('php://input');
        $obj = json_decode($data); //as object
        $arr = json_decode($data, true); //as array
        $out = 'Вы спрашивали об этом объекте:' . PHP_EOL  . PHP_EOL . print_r($obj, true) 
               . PHP_EOL . 'и этом массиве:' . PHP_EOL . PHP_EOL . print_r($arr, true); 
    
    } else $out = 'Не надо ля-ля!';
    
    exit($out);
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>Это результат GET запроса. Вы просили эту страницу, вы ее получили. Хотите сделать POST запрос и получить на него ответ: нажмите "Да".</p>
<button>Да</button>
<pre></pre>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$('button').click(function() {
    let person = {
        name:"Vova",
        last:"Nak",
        age:18
    };
    
    $.ajax({
        type: "POST",
        url: location,
        headers: {'Content-type': 'application/json'},
        data: JSON.stringify(person),
        success: function(d) {
            $('pre').text(d).before('<p>А это результат асинхронного POST запроса:</p>');
        }
    })
})
</script>
</body>
</html>


Здесь переданный заголовок 'Content-type: application/json' сервер анализирует, и если тип соответствует ожиданиям, то выполняет получение и декодирование данных извне. А вы где-то увидели, скопировали, а для чего не понятно. В данном случае (принимаются сырые данные) сервер не обязан анализировать ничего, ибо он не в курсе чего вы ожидаете, поэтому анализ всего возлагается на разработчика. Вы же просто впустую выплевываете заголовки так как ими далее не интересуетесь. А ведь мало проверить только тип, заголовок можно подделать, а прислать все что угодно.

Запомните - прежде чем обменяться данными сервер с клиентом обмениваются "любезностями" посредством заголовков. Именно поэтому в РНР передавать заголовки нужно до любого вывода в браузер, иначе будет ошибка. А любой вывод, это даже один пробел до РНР тега, который предвещает весь код на странице.

Ситуация с обработкой пост-запросов, имеется ввиду все типы запросов к той же странице не ради всего ее контента, такая же как и с заголовками - обработка должна предвещать код на странице. Иначе клиент на свой запрос получит совсем не то, что ожидает, а в случае если тип данных обмена JSON это вызовет ошибки на клиенте.

Запустите страницу - ответом будет определенное обработчиком POST запроса. Затем закомментируйте exit($out); и попробуйте после этого, затем попробуйте с переносом всего РНР кода в середину/конец страницы. Разве не понятно почему в последних случаях на клиенте будет хрень, а не то что ожидалось?

Последний раз редактировалось laimas, 22.11.2019 в 06:57.
Ответить с цитированием
  #17 (permalink)  
Старый 22.11.2019, 12:00
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
Запустите страницу - ответом будет определенное обработчиком POST запроса. Затем закомментируйте exit($out); и попробуйте после этого, затем попробуйте с переносом всего РНР кода в середину/конец страницы. Разве не понятно почему в последних случаях на клиенте будет хрень, а не то что ожидалось?
Это-то понятно, только не понятно зачем в одном файле «живут» и HTML и JavaScript и PHP (а позднее ещё появятся всевозможные инъекции одного в другое) У вас один проект — один PHP файл?
Ответить с цитированием
  #18 (permalink)  
Старый 22.11.2019, 12:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Malleys
Это-то понятно, только не понятно зачем в одном файле «живут» и HTML и JavaScript и PHP
Опять начинается, охота повыпендриваться? Так может вас ткнуть носом кому следует задавать этот вопрос?
Ответить с цитированием
  #19 (permalink)  
Старый 22.11.2019, 12:21
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

Спасибо вам всем,это не проект,просто пробую разные конфиги
Можете ещё подсказать с чего начать обучение PHP?
Ответить с цитированием
  #20 (permalink)  
Старый 22.11.2019, 12:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от vovaJsc
Можете ещё подсказать с чего начать обучение PHP?
Со справочника языка, ибо вы делаете ошибки, которые пахнут отсебятиной, а нужно знать применяемые функции. Естественно и книги в сети тоже можно найти.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать изображение в php (не через input type="file") iesghost Общие вопросы Javascript 4 03.03.2019 11:23
Как из php файла передать данные в переменную javascript angelzzz Общие вопросы Javascript 36 01.07.2016 15:54
как передать php массивы через ajax Evsik AJAX и COMET 11 11.07.2015 06:32
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как часть php кода(не весь файл) подгружать через ajax/jquery? strol AJAX и COMET 0 19.02.2012 16:01