簡體   English   中英

通過XmlHttpRequest將數據從JS傳遞到PHP

[英]Pass data from JS to PHP via 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));
}

簡短說明:在此函數中,我生成一個對象,然后使用POST請求通過XmlHttpRequest發送到PHP,就是這樣,在PHP端,有一個變量捕獲該請求並回顯它。 這是代碼:

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

有什么問題和/或應該如何更好地解決此問題?

您做錯了兩件事。

  1. 在發送對象之前,您不會將其轉換為JSON: xmlhttp.send(JSON.stringify({newTransaction})); 相反,您發送的是對象的默認字符串表示形式: "[object Object]" ,它沒有幫助。
  2. 您的PHP希望接收URL編碼或Multipart表單數據。 它不希望接收JSON。 看到這個答案

簡稱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調用。這將為您提供更好地處理請求和響應的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM