簡體   English   中英

當我從 JavaScript 文件向同一應用程序中的 PHP 文件發送 POST 請求時,PHP 腳本始終將其讀取為 GET 請求。 為什么?

[英]When I send a POST request from a JavaScript file to a PHP file in the same application, the PHP script always reads it as a GET request. Why?

我的 web 頁面之一上有一個動態表單。 表單將數據存儲在腳本文件中,並在用戶從表單中添加更多數據時對其進行更新。 這是我在 JS 中創建的 object:

const survey = {
   title: '',
   createdBy: '',
   description: '',
   openingMsg: '',
   thankyouMsg: '',
   questions: [],
}

questions 數組包含 Question 對象。 這是 class:

class Question {
   constructor(id) {
      this.id = id
   }
   questionText = ''
   type = ''
   choices = new Map()
}

我向提交按鈕添加了一個事件偵聽器,如下所示:

const saveSurveyBtn = document.getElementById('saveSurvey')
surveyForm.addEventListener('submit', saveSurvey)

和 saveSurvey function 看起來像這樣:

function saveSurvey(e) {
    e.preventDefault()

    fetch('../../actions/save-survey.php', {
        method: 'POST',
        body: JSON.stringify(survey),
        headers: {
            "Content-type": "application/json;charset=UTF-8"
        }
    })
}

如您所見,我正在嘗試將數據從 JS 發送到本地 php 腳本。 一切都很好,直到我找到 php 腳本。 問題是這樣的; 不管在我的 fetch 調用中我使用method: POST ,它總是作為 GET 請求發送。 為什么? 我怎樣才能解決這個問題?

好的,我不能告訴你為什么我的表單數據沒有被發布,我已經確認它是作為 GET 請求發送的。 但這就是我解決這個問題的方法。

我在表單中添加了一個隱藏字段,並將“提交”類型的按鈕更改為“按鈕”類型。 然后我通過 JS 抓住了那個按鈕並在它上面設置了一個點擊監聽器。 當用戶按下按鈕時,我首先將我的 JSON 序列化調查 object 分配給隱藏字段。 然后我手動提交了表單,它通過 POST 發送到 PHP 腳本。 表單的方法始終是“發布”,但最初似乎並不重要。 我不知道為什么,但這是我在表格中的輸入:

<input name="survey" id="survey" type="hidden" value="">

然后我抓住看起來像這樣的按鈕:

<button type="button" class="btn btn-success" id="saveSurvey">Save Survey</button>

請注意,它不再是“提交”類型。 然后我向它添加一個單擊事件偵聽器,並在單擊時調用此 function:

function saveSurvey(e) {
    document.getElementById('survey').value = JSON.stringify(survey)
    surveyForm.submit()
}

這行得通。 我不知道我是否完全回答了我自己的問題,所以如果其他人提出更好的答案,我會調整這篇文章。 感謝大家的幫助。

暫無
暫無

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

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