通过XmlHttpRequest

时间:2018-09-03 21:29:04

标签: javascript php xmlhttprequest

我现在遇到一个问题,那就是向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;

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

2 个答案:

答案 0 :(得分:2)

您做错了两件事。

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

答案 1 :(得分:-1)

简而言之,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调用。这将为您提供更好地处理请求和响应的工具。