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