我现在遇到一个问题,那就是向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;
出什么问题了和/或应该如何更好地解决此问题?
答案 0 :(得分:2)
您做错了两件事。
xmlhttp.send(JSON.stringify({newTransaction}));
。相反,您将发送对象的默认字符串表示形式:"[object Object]"
,这没有帮助。答案 1 :(得分:-1)
简而言之,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蒂格
echo var_dump($_POST);die();
来确切地了解您收到了什么