Javascript.RU

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

Как передать даные через ajax и принять их на php
function toPHP(){
    var require = new XMLHttpRequest();
    
    require.open("POST","php1.php",true);

    require.setRequestHeader('Content-Type','application/json');	
    person = 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>
    <!-- <button id="goP">GOOOOOO</button> -->
    <form action="php1.php" method="post">1)
        <button id="goP">GOOOOOO</button>2)
    </form>
    <script src="php.js"></script>
</body>
</html>

1)
Обязательно нужно употреблять тег формы, если в ajax запросе мы указываем куда и каким методом
Можно ли обойтись просто привязкой функции к кнопке?
2)Я хочу на кнопку отправлять объект и принимать его на стороне php, как мне это реализовать?
Пробовал через file_get_contents
ничего не получает
и через $ _POST то же ....
HTML на странице php 1.php
То есть встроенный в php
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2019, 18:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от vovaJsc
Обязательно нужно употреблять тег формы
Нет, она у вас в общем-то и пустая.

Сообщение от vovaJsc
отправлять объект и принимать его на стороне php, как мне это реализовать?
На сервер отправляются не объекты, а строки или бинарные данные. Что тут person: person = JSON.stringify(person);, глобальная переменная содержащая объект?
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2019, 19:03
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

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)

Да,простите не добавил!!!
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2019, 19:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Тогда одно из двух:

require.send('person='+person);


И на сервере поучить объект или массив как:

$a = json_decode($_POST['person']); //$a будет объектом
//или
$a = json_decode($_POST['person'], true); //$a будет массивом


Либо получать необработанные данные:
require.send(person);


и на сервере:
$a = json_decode(file_get_contents('php://input'));


Если при этом клиентом будут отправляться и бинарные данные, то использовать поток php://input нельзя, он не поддерживает тип multipart/form-data.

Скачивайте руководство РНР и изучайте.

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

Хорошо,спасибо вам!
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2019, 19:33
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

И еще, почему когда я выношу кнопку с тега формы, любые действия на стороне сервера не реагируют?
Ответить с цитированием
  #7 (permalink)  
Старый 20.11.2019, 19:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сервер вообще не знает ни о каких кнопках, а кнопка <button id="goP">GOOOOOO</button> по умолчанию имеет тип submit, а значит будет отправлять форму естественным образом, это действие по умолчанию, которое нужно блокировать. А отправление формы естественным образом, это переход по адресу указанному в action="php1.php", следовательно никакого ajax запроса сервер не получит.

Нет у вас ничего в форме, поэтому выбросите этот тег вообще и оставьте одну кнопку.

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

Хорошо, если я правильно понял, что я должен повесить атрибут name на кнопку и через isset ($ _ POST) проверять был задействован event?
И могу ли я повесить на кнопку метод отправки и action?
Простите что вас беспокою !!!
Ответить с цитированием
  #9 (permalink)  
Старый 20.11.2019, 19:57
Интересующийся
Отправить личное сообщение для vovaJsc Посмотреть профиль Найти все сообщения от vovaJsc
 
Регистрация: 20.11.2019
Сообщений: 18

И как блокировать дейстиве кнопки по умолчанию???
Ответить с цитированием
  #10 (permalink)  
Старый 20.11.2019, 20:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Не кнопки, а формы. Выбрасывайте форму, она у вас мертвым грузом. А если ее отправлять, то обрабатывать нужно не щелчок по кнопке, а событие submit формы, в котором аргументом будет передан event и можно event.preventDefault(). Если хочется оставить и как есть, и чтобы работало, то в тег формы можно добавить onsubmit="return false".
Ответить с цитированием
Ответ



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

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


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