首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过XmlHttpRequest将数据从JS传递到PHP

通过XmlHttpRequest将数据从JS传递到PHP
EN

Stack Overflow用户
提问于 2018-09-04 05:29:04
回答 2查看 1.2K关注 0票数 0

我现在遇到一个问题,就是发送一个JS对象到PHP,我发现这应该通过HtmlHttpRequest来完成,但问题是我是PHP的新手,而且,我不太了解这个XmlHttpRequest是如何工作的。我尝试过不同的方法,但我发现适合我的方法总是返回相同的错误。代码将发布在下面,现在关于问题,我可以执行此请求,但当我执行此操作时,PHP端返回一条错误消息,指出存在未定义的索引。

下面是所需的代码

JS部分:

代码语言:javascript
复制
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));
}

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

代码语言:javascript
复制
$newTransaction = $_POST['newTransaction'];
echo $newTransaction;

哪里出了问题和/或如何更好地解决此问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-04 06:03:38

你做错了两件事。

JSON

  • 在发送对象之前,不能将其转换为:xmlhttp.send(JSON.stringify({newTransaction}));。相反,您发送的是对象的默认字符串表示:"[object Object]",这是没有帮助的。
  1. 您的PHP期望接收URL编码或多部分表单数据。它不期望接收JSON。请参阅this answer
票数 2
EN

Stack Overflow用户

发布于 2018-09-04 05:55:57

XmlHttpRequestAjax的缩写是不会重新加载页面的请求,使用此逻辑,您将像在表单中一样发送POST请求,当您发送表单时,您将向要发送的文件发送一对key : values。假设您有这样的表单

代码语言:javascript
复制
<input name="transactionID">
<input name="time">
<input name="senders">
<input name="receivers">
<input name="finalSum">

在全局$_POST数组中接收的值如下所示

代码语言:javascript
复制
{
    "transactionID": "some id",
    "time": "some time",
    "senders": "some senders",
    "receivers": "some receivers",
    "finalSum": "final sum"
}

当你做一个Ajax请求时,你也做了同样的事情,但是没有inputs html,当你像这样发送数据的时候

代码语言:javascript
复制
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中,您将收到如下内容

代码语言:javascript
复制
{
    "data" : {
        {
            "transactionID": "some id",
            "time": "some time",
            "senders": "some senders",
            "receivers": "some receivers",
            "finalSum": "final sum"
        }
    }
}

我向你推荐2个图

receiving

  • use
  1. in your admin.php使用echo var_dump($_POST);die();查看你到底在使用什么插件来执行ajax调用,如jQuery、axios等,这将为你提供更好地处理请求和响应的工具。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52156348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档