Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2019, 00:32
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

Как передать даные через ajax и принять их на php
let person = {
    name:"Vova",
    last:"Nak",
    age:18
}
// let person = "hello"
// let pre = "order=";
function toPHP(){
    
    var require = new XMLHttpRequest();
    
    require.open("POST","php1.php",true);

    require.setRequestHeader('Content-Type','application/json');	

    person = JSON.stringify(person);
    // console.log(data = JSON.stringify(person));
    require.onreadystatechange = function(){
        if(require.readyState != 4) return;
        if(require.status != 200){
            console.log(require.status + ": " + require.statusText);
        } else{
            console.log("Hello");
        }
            require.send(person);
    }
}
document.getElementById("goP").addEventListener("click",toPHP)

<!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>
    <input type="submit" id="goP" name="nameOf" value="Go">
    </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>


$a = json_decode(file_get_contents('php://input'));
print_r($a);
if($_SERVER['REQUEST_METHOD'] == 'POST')1)
{
    echo "hey";
}

На сервере не чего не происходит,никаких даных нету
Ajax запрос написал кажется нормально,но всеравно не выходит
HTML размещен на странице php,то есть откуда вызываю там и хочу получить ответ
Когда пишу разметку с формой то хотя бы на сервере 1) возращает ответ "hey"!
Когда же кнопка сама по себе никакой реакции,хотя я в ajax запросе описываю метод передачи и куда....
Помогите прошу!!!!!!!!!!

Последний раз редактировалось vovaJsc, 21.11.2019 в 00:44.
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2019, 02:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Это что такое - if($_SERVER['REQUEST_METHOD'] == 'POST')1)?

Заменить 'application/json' на 'application/x-www-form-urlencoded', require.send(person); на require.send('json='+person);, принимать на сервере как $a = json_decode($_POST['json']); и не использовать поток php:// до тех пор пока хоть что-то не будете знать.

Если асинхронный запрос обращается к текущей странице, то код принимающий запрос должен располагаться до любого вывода в браузер и заканчиваться выходом.

Последний раз редактировалось laimas, 21.11.2019 в 03:00.
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2019, 23:49
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

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

vovaJsc, вам нужно исправить ошибки... Отправляйте (да, нужно отправить!) на сервер асинхронно...
php.js
let person = {
    name:"Vova",
    last:"Nak",
    age:18
}
function toPHP(){
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "php1.php");
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(JSON.stringify(person));
    xhr.onreadystatechange = function(){
        if(xhr.readyState != 4) return;
        if(xhr.status != 200){
            console.log(xhr.status + ": " + xhr.statusText);
        } else{
            console.log("Hello", xhr.responseText);
        }
    }
}
document.getElementById("goP").addEventListener("click",toPHP)


Скрипт на PHP обычно начинается с <?php и у вас синтаксическая ошибка...
Для примера, отправляет то, что принято!
php1.php
<?php

$a = json_decode(file_get_contents('php://input'));
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo json_encode($a);
}


laimas, а экранировать кто будет?

Последний раз редактировалось Malleys, 22.11.2019 в 00:17.
Ответить с цитированием
  #5 (permalink)  
Старый 22.11.2019, 01:22
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

$a = json_decode(file_get_contents('php://input'));

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    echo json_encode($a);

}


// async function postJSONAsync(url, data) {
//     return new Promise((resolve, reject) => {
//         let xhr = new XMLHttpRequest();
//         xhr.open("POST", url);
//         xhr.setRequestHeader("Content-Type", "application/json");
//         let body = JSON.stringify(data);
//         xhr.send(body);
 
//         xhr.onload = () => {
//             if (xhr.status === 200) {
//                 resolve(xhr.response);
//             }
//             else {
//                 reject(new Error(`${xhr.status}: ${xhr.statusText}`));
//             }
//         };
//         xhr.onerror = () => {
//             reject(new Error(`Ошибка сети. Сервер не отдал код ошибки.`));
//         };
//     });
// }
 
// async function toPHP() {
//     let person = {
//         name: "Vova",
//         last: "Nak",
//         age: 18
//     }
 
//     let result = await postJSONAsync("php1.php", person);
//     console.log(result);
// }
 
// document.getElementById("goP").addEventListener("click", toPHP);

Пробывал таким способом,чётно
Не понимаю где ошибка и самое главное что пробывал нечего не отправлять на сервер,а просто установить соединённые,но даже так php нечего не выводит
Ответить с цитированием
  #6 (permalink)  
Старый 22.11.2019, 01:44
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от vovaJsc
Не понимаю где ошибка и самое главное что пробывал нечего не отправлять на сервер,а просто установить соединённые,но даже так php нечего не выводит
То, что я вам приводил, то выводит... Вот пример — https://repl.it/@Malleys/KhakiUntrueNaturaldocs
Ответить с цитированием
  #7 (permalink)  
Старый 22.11.2019, 03:05
Интересующийся
Отправить личное сообщение для 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">
    </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>

<?php
$a = json_decode(file_get_contents('php://input'));

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

    echo "Hey";

}
?>


let person = {
        name:"Vova",
        last:"Nak",
        age:18
    }
    function toPHP(){
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "phpForm1.php");
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.send(JSON.stringify(person));
        xhr.onreadystatechange = function(){
            if(xhr.readyState != 4) return;
            if(xhr.status != 200){
                console.log(xhr.status + ": " + xhr.statusText);
            } else{
                console.log("Hello", xhr.responseText);
                // document.getElementById("info").textContent = xhr.responseText;
            }
        }
    }
    document.getElementById("goP").addEventListener("click",toPHP)

Я разместил HTML в файле PHP и с JS шлю запрос на этой самый PHP файл,как мне можно вывести резуьтат запроса с помощью PHP на эту же страницу(echo или что-то другое),хочу более подробно разобраться???????Спасибо еще раз!!!!
Ответить с цитированием
  #8 (permalink)  
Старый 22.11.2019, 03:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

vovaJsc, сказано же было, как и где обрабатывать асинхронный запрос клиента, если он производится к тоже же странице, которая и породила все. Разе из кода вашей страницы:

<!DOCTYPE html>
<html lang="en">
<head>
....
</html>
 
<?php
$a = json_decode(file_get_contents('php://input'));
 
if($_SERVER['REQUEST_METHOD'] == 'POST') {
 
    echo "Hey";
 
}
?>


не понятно чем ответит сервер на запросы GET и POST этой страницы? Ну посмотрите внимательно на структуру кода страницы, подумайте. Ясна причина "не то"? А как должно быть?

Сообщение от vovaJsc
xhr.setRequestHeader("Content-Type", "application/json");
В данном случае этот заголовок для РНР как пустой звук. Либо вы обрабатываете заголовок, узнаете тип данных и только после этого трактуете их как требуется, либо не посылайте его вообще. Вы пишите автоматом то, что где-то увидели, а зачем это не интересуетесь.

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

То есть ответ должен содержаться в каком либо теге HTML??
Я просто до конца не понимаю,я просто хочу тот запрос вывести через PHP на страницу.
Ответить с цитированием
  #10 (permalink)  
Старый 22.11.2019, 03:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от vovaJsc
То есть ответ должен содержаться в каком либо теге HTML?
На официальном сайте разработчиков РНР, куда я давал ссылку, есть руководство по языку в формате CHM, на многих языках, включая и русский. Скачивайте и вникайте.

У вас одна страница, которая запрашивается клиентом и это будет GET запрос. Что при этом получит клиент? Все что на ней выводится, то есть начиная с первого html тега. Дойдя до РНР кода, он его выполнит и поступит по условию в нем. А код обрабатывает POST запрос, если будет, то также сделает вывод в бразуер.

С этой же страницы на эту же страницу клиентом шлется POST запрос, значит снова он получит начиная с первого html тега и до конца.

Что из этого следует - где на странице должен размещаться php-код обрабатывающий POST запрос?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать изображение в 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