Передача данных из JS в PHP через XmlHttpRequest - PullRequest
0 голосов
/ 04 сентября 2018

Я сейчас сталкиваюсь с проблемой, которая заключается в отправке JS-объекта в PHP, и я обнаружил, что это должно быть сделано через HtmlHttpRequest, но проблема в том, что я новичок в PHP, и более того Я не очень хорошо понимаю, как это XmlHttpRequest работает. Я пробовал разные методы, но тот, который я нашел подходящим для меня, постоянно возвращает одну и ту же ошибку. Код будет опубликован ниже, и теперь о проблеме, я могу выполнить этот запрос, но когда я выполняю это, сторона PHP возвращает мне сообщение об ошибке, что существует неопределенный индекс.

А вот и нужный код

JS часть:

function createTransaction() {
    var xmlhttp = new XMLHttpRequest();
    var newTransaction = {"name": document.getElementById('wallets').value}
    newTransaction.data = {
        "transactionID": document.getElementById('trans-id').value,
        "time": document.getElementById('creation-time').value,
        "senders": getSenders(),
        "receivers": getReceivers(),
        "finalSum": setSum()
    };
    xmlhttp.open('POST', '/admin.php', true);
    xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    xmlhttp.onreadystatechange = function () {
        if (this.readyState === 4 || this.status === 200) {
            console.log(this.responseText); // echo from php
        }
    };
    xmlhttp.send({newTransaction});
    console.log(JSON.stringify(newTransaction));
}

Краткое описание: в этой функции я генерирую объект, затем отправляю в PHP через XmlHttpRequest с помощью запроса POST, и все, на стороне PHP есть переменная, которая перехватывает этот запрос и отображает его , Вот код:

$newTransaction = $_POST['newTransaction'];
echo $newTransaction;

Что не так и / или как лучше решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы делаете две вещи неправильно.

  1. Вы не конвертируете свой объект в JSON до того, как отправите его: xmlhttp.send(JSON.stringify({newTransaction}));. Вместо этого вы отправляете строковое представление объекта по умолчанию: "[object Object]", что бесполезно.
  2. Ваш PHP ожидает получения закодированных URL-адресов или данных многочастной формы. Он не ожидает получения JSON. См этот ответ
0 голосов
/ 04 сентября 2018

Для краткости XmlHttpRequest или Ajax - это запросы, которые не будут перезагружать страницу, с этой логикой вы отправляете запрос POST, как вы делали бы в форме, когда вы отправляете форму, вы ' отправка пары key : values в файл, который вы отправляете, скажем, у вас есть такая форма

<input name="transactionID">
<input name="time">
<input name="senders">
<input name="receivers">
<input name="finalSum">

значения будут получены в глобальном $_POST массиве

{
    "transactionID": "some id",
    "time": "some time",
    "senders": "some senders",
    "receivers": "some receivers",
    "finalSum": "final sum"
}

когда вы делаете запрос Ajax, вы делаете то же самое, но без inputs html, когда отправляете данные, подобные этому

newTransaction.data = {
    "transactionID": document.getElementById('trans-id').value,
    "time": document.getElementById('creation-time').value,
    "senders": getSenders(),
    "receivers": getReceivers(),
    "finalSum": setSum()
};
xmlhttp.send({newTransaction});

В вашем admin.php вы получите что-то вроде

{
    "data" : {
        {
            "transactionID": "some id",
            "time": "some time",
            "senders": "some senders",
            "receivers": "some receivers",
            "finalSum": "final sum"
        }
    }
}

Я рекомендую вам 2 колена

  1. в вашем admin.php используйте echo var_dump($_POST);die();, чтобы точно узнать, что вы получаете
  2. используйте плагин для выполнения вызовов ajax, таких как jQuery, axios и т. Д., Что даст вам инструменты для лучшей обработки запроса и ответов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...