
21.11.2019, 00:32
|
Интересующийся
|
|
Регистрация: 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.
|
|

21.11.2019, 02:58
|
Профессор
|
|
Регистрация: 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.
|
|

21.11.2019, 23:49
|
Интересующийся
|
|
Регистрация: 20.11.2019
Сообщений: 18
|
|
Эта строка проверяет или бы какой ли бо запрос POST
И прикол в том что он нечего не выводит,значит запрос не правильно написан...
|
|

22.11.2019, 00:07
|
 |
Профессор
|
|
Регистрация: 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.
|
|

22.11.2019, 01:22
|
Интересующийся
|
|
Регистрация: 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 нечего не выводит
|
|

22.11.2019, 01:44
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от vovaJsc
|
Не понимаю где ошибка и самое главное что пробывал нечего не отправлять на сервер,а просто установить соединённые,но даже так php нечего не выводит
|
То, что я вам приводил, то выводит... Вот пример — https://repl.it/@Malleys/KhakiUntrueNaturaldocs
|
|

22.11.2019, 03:05
|
Интересующийся
|
|
Регистрация: 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 или что-то другое),хочу более подробно разобраться???????Спасибо еще раз!!!!
|
|

22.11.2019, 03:26
|
Профессор
|
|
Регистрация: 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.
|
|

22.11.2019, 03:34
|
Интересующийся
|
|
Регистрация: 20.11.2019
Сообщений: 18
|
|
То есть ответ должен содержаться в каком либо теге HTML??
Я просто до конца не понимаю,я просто хочу тот запрос вывести через PHP на страницу.
|
|

22.11.2019, 03:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от vovaJsc
|
То есть ответ должен содержаться в каком либо теге HTML?
|
На официальном сайте разработчиков РНР, куда я давал ссылку, есть руководство по языку в формате CHM, на многих языках, включая и русский. Скачивайте и вникайте.
У вас одна страница, которая запрашивается клиентом и это будет GET запрос. Что при этом получит клиент? Все что на ней выводится, то есть начиная с первого html тега. Дойдя до РНР кода, он его выполнит и поступит по условию в нем. А код обрабатывает POST запрос, если будет, то также сделает вывод в бразуер.
С этой же страницы на эту же страницу клиентом шлется POST запрос, значит снова он получит начиная с первого html тега и до конца.
Что из этого следует - где на странице должен размещаться php-код обрабатывающий POST запрос?
|
|
|
|