首页 > 解决方案 > 通过 XmlHttpRequest 将数据从 JS 传递到 PHP

问题描述

我现在遇到一个问题,其中包括将一个 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));
}

简短描述:在这个函数中,我正在生成一个对象,然后通过XmlHttpRequest使用POST请求发送到 PHP,仅此而已,在 PHP 端有一个变量可以捕获该请求并回显它。这是代码:

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

出了什么问题和/或应该如何更好地解决这个问题?

标签: javascriptphpxmlhttprequest

解决方案


你做错了两件事。

  1. 在发送对象之前,您不会将对象转换为 JSON xmlhttp.send(JSON.stringify({newTransaction}));:. 相反,您发送的是对象的默认字符串表示:"[object Object]"这没有帮助。
  2. 您的 PHP 期望接收 URL 编码或 Multipart 表单数据。它不希望收到 JSON。看到这个答案

推荐阅读