【问题标题】:PHP sends back empty bodyPHP 发回空主体
【发布时间】:2017-12-26 00:57:26
【问题描述】:

我正在尝试将表单数据从 Vue 资源发送到我的 PHP 页面。我可以看到它显示在 PHP 页面上,但是当我将它作为 JSON 发送回来时,我得到一个空响应。为什么它发送一个空响应?

编辑:

看起来问题是提交按钮的值没有在 PHP 中设置。我不确定为什么会这样。尝试使用$_REQUESTaxios/$.post,但没有区别。

PHP:

if(isset($_POST['submit']){
   echo json_encode($_POST);
}

JS:

this.$http.post('addalbum.php', new FormData($('#submitalbum')))
.then(data => console.log(data));

HTML:

<form class="col s12" id="submitalbum" method="post" action="addalbum.php">
    <div class="row">
        <div class="input-field col s6">
            <input  name="artist" placeholder="Artist" type="text">

        </div>
        <div class="input-field col s6">
            <input  name="title" placeholder="Title" type="text">

        </div>
    </div>
    <div class="row">
        <div class="input-field col s12">
            <input  name="genre" placeholder="Genre">

        </div>
    </div>
    <div class="row">
        <div class="input-field col s12">
            <input  id="released" type="number" name="released" placeholder="Year Released">
        </div>
        <button @click.prevent="addNewAlbum" name="submit" class="waves-effect waves-light btn">Submit</button>
    </div>
</form>

【问题讨论】:

  • 你在上面的代码中“发回”在哪里?
  • 使用 echo 语句。如果它不是 $_POST 数组,它就可以正常工作。
  • PHP 疯了,我走开,抱歉戳我的脑袋……
  • 向我们展示您的#submitalbum 表单
  • 更新了我的帖子。

标签: php http post vue.js forms


【解决方案1】:

由于多种原因返回空响应。请参阅下面的解释。

jQuery 选择器

看来,用于查找表单的选择器使用了 jQuery id 选择器:

this.$http.post('addalbum.php', new FormData($('#submitalbum')))

但是the jQuery function(即$())返回一个集合(一个数组):

var submitAlbumCollection = $('#submitalbum');
console.log('submitAlbumCollection: ', submitAlbumCollection);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="col s12" id="submitalbum" method="post" action="addalbum.php"></form>

但是FormData() 需要“HTML &lt;form&gt; 元素1,而不是数组。

因此,如果您要使用 jQuery 函数,请从中获取第一个元素以获取对表单的引用:

var forms = $('#submitalbum');
if (forms.length) {
    this.$http.post('addalbum.php', new FormData(forms[0]))

按钮元素不发送值

&lt;button&gt; 不是表单输入,因此表单数据中不会有相应的值。如果您想检查表单值,请尝试检查艺术家、标题等。

if(isset($_POST['artist'])) {
    echo json_encode($_POST);
}

如果你真的想检查$_POST['submit'] 是否真实,你可以:

  • 添加隐藏输入:

    <input type="hidden" name="submit" value="1">
    
  • 将按钮转换为提交按钮

    <input type="submit" name="submit" value="1">
    
  • 接受this answer 的建议并手动append 输入表单数据

this phpfiddle 中查看演示。请注意,phpfiddle 不允许多个页面,因此来自 addalbum.php 的代码被放置在顶部,并且对它的引用被替换为 &lt;?php echo $_SERVER['PHP_SELF'];?&gt;(即在客户端代码中)。

缺少括号

另外,PHP 代码的第一行缺少括号:

if(isset($_POST['submit']){

要更正此问题,请添加缺少的右括号以关闭表达式:

if(isset($_POST['submit'])){

1https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多