繁体   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