[英]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.