通过XmlHttpRequest将数据从JS传递给PHP

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (408)

我现在遇到一个问题,包括向PHP发送一个JS对象,我发现它应该通过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;

有什么问题和/或如何更好地解决这个问题?

提问于
用户回答回答于

一个XmlHttpRequestAjax短期是不会重新载入页面,这个逻辑你发送一个请求,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. 使用插件来执行像jQuery,axios等的ajax调用。这将为您提供更好地处理请求和响应的工具。
用户回答回答于

你做错了两件事。

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

扫码关注云+社区

领取腾讯云代金券