Javascript.RU

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

ajax без jquery
Нужно написать асинхронный запрос в пхп без использования jquery
пишу

let xhr = new XMLHttpRequest();

    let json = JSON.stringify({
        name: "Вася",
        surname: "Петров"
    });

    obje ={};
    obje = {
        "name" : "name",
        "phone" : "phone",


    };
    
    xhr.open("POST", 'https://nirax-cargo.ru/amocrm/index.php')
   

    xhr.send( obje);

в пхп приходит пустой массив, если отправляю объект или в формате джсон тоже самое, в чём ошибка? как отправить массив в пхп?
Ответить с цитированием
  #2 (permalink)  
Старый 14.12.2020, 10:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

grafillo,
https://learn.javascript.ru/fetch
Ответить с цитированием
  #3 (permalink)  
Старый 14.12.2020, 10:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от grafillo
JSON.stringify
в пхп приходит пустой массив
Нужно обрабатывать ввод на сервере или отдавать эту строку под ключом, тогда и массив пуст не будет.
Ответить с цитированием
  #4 (permalink)  
Старый 14.12.2020, 12:28
Интересующийся
Отправить личное сообщение для grafillo Посмотреть профиль Найти все сообщения от grafillo
 
Регистрация: 22.05.2013
Сообщений: 16

как это будет выглядеть в виде кода?
Ответить с цитированием
  #5 (permalink)  
Старый 14.12.2020, 12:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

grafillo,
это к кому вопрос? Если о вводе, то читать о php://input. В руководстве же и примеры ищите.

Либо передавайте json строку под ключом, например "mykey=" + JSON.stringify(...) и декодируйте ее на сервере как значение $_POST['mykey'].
Ответить с цитированием
  #6 (permalink)  
Старый 14.12.2020, 17:44
Интересующийся
Отправить личное сообщение для grafillo Посмотреть профиль Найти все сообщения от grafillo
 
Регистрация: 22.05.2013
Сообщений: 16

Сообщение от laimas Посмотреть сообщение
grafillo,
это к кому вопрос? Если о вводе, то читать о php://input. В руководстве же и примеры ищите.

Либо передавайте json строку под ключом, например "mykey=" + JSON.stringify(...) и декодируйте ее на сервере как значение $_POST['mykey'].
я на сервере вот так ловлю, приходит пустой массив
$req = print_r($_POST, true);
    file_put_contents('visitors.txt', $req);
Ответить с цитированием
  #7 (permalink)  
Старый 14.12.2020, 17:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от grafillo
я на сервере вот так ловлю
Ловить нечего, если не делать так как написано выше.
Ответить с цитированием
  #8 (permalink)  
Старый 14.12.2020, 18:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

grafillo, уясните простое - РНР принимает POST данные как пары ключ=>значение и если таковых не обнаружит, то вернет пустой массив $_POST. Это и происходит когда вы отдаете на сервер просто строку - json. В этом случае нужно обрабатывать сырые данные, то что пришло, самостоятельно, как по ссылке.

Но если json строку передавать как значение ключа, то ее можно получить из $_POST.

Если же нужно отправить объект, то его нужно серелизовать, можно так:

var data = {
    name: "Вася",
    surname: "Петров"
};
//а это для отправки
var send_data = Object.entries(data).map( m => m.join('=')).join('&'); //name=Вася&surname=Петров
xhr.send(send_data);


Вот теперь массив $_POST будет заполнен.
Ответить с цитированием
  #9 (permalink)  
Старый 15.12.2020, 10:15
Интересующийся
Отправить личное сообщение для grafillo Посмотреть профиль Найти все сообщения от grafillo
 
Регистрация: 22.05.2013
Сообщений: 16

Сообщение от laimas Посмотреть сообщение
grafillo, уясните простое - РНР принимает POST данные как пары ключ=>значение и если таковых не обнаружит, то вернет пустой массив $_POST. Это и происходит когда вы отдаете на сервер просто строку - json. В этом случае нужно обрабатывать сырые данные, то что пришло, самостоятельно, как по ссылке.

Но если json строку передавать как значение ключа, то ее можно получить из $_POST.

Если же нужно отправить объект, то его нужно серелизовать, можно так:

var data = {
    name: "Вася",
    surname: "Петров"
};
//а это для отправки
var send_data = Object.entries(data).map( m => m.join('=')).join('&'); //name=Вася&surname=Петров
xhr.send(send_data);


Вот теперь массив $_POST будет заполнен.
вот мой код и он не сработал, мож в пхп чтото не так?
let xhr = new XMLHttpRequest();

    obje ={};
    obje = {
        name : "name",
        phone : "phone",
    };


xhr.open("POST", 'https://nir-cago.ru/amocrm/nirxamo.php')

    var send_data = Object.entries(obje).map( m => m.join('=')).join('&'); 

    xhr.send(send_data);
Ответить с цитированием
  #10 (permalink)  
Старый 15.12.2020, 14:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

<?
if($_POST) exit(print_r($_POST, 1));
?>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function send() {
    var data = {
        name: "Вася",
        surname: "Петров"
    },
    send_data = Object.entries(data).map(m => m.join('=')).join('&'),
    xhr = new XMLHttpRequest();
    
    xhr.open("POST", location);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.onload = function() {
        if (xhr.status == 200) {
            alert(xhr.responseText)
        }
    }
    xhr.send(send_data);
}
</script>
</head>
<body>
<button onclick="send()">Send</button>
</body>
</html>


Сохранить под любым именем и выполнить. Работает?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров в url средствами jquery ajax sys Общие вопросы Javascript 19 10.10.2016 19:03
Динамическая загрузка картинок с помощью jQuery и AJAX Wahtel jQuery 6 13.07.2015 16:31
Angular && jQuery Ajax borodatych Angular.js 1 19.06.2015 13:03
Какая разница между post запросами jquery и ajax? Rooner jQuery 2 18.06.2012 14:29
как сделать аналог jquery.load без jquery? vvsh AJAX и COMET 5 05.06.2009 22:40