使用 Axios 将数据从 Vue.js 传递到 PHP

Bil*_*adj 6 html javascript php vue.js axios

我正在尝试使用 Axios 将一些数据从在 Vue.js 中完成的 GUI 传输到 PHP 文件。我尝试了 GET 和 POST 参数,但它不起作用:

我在这个index.php 表单中输入数据:

在此处输入图片说明

索引.php:

<!DOCTYPE HTML>
<HTML>
<head>
    <script src="https://unpkg.com/vue"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<BODY>
    <div id="container" class="container">
        <div>
            <label>First name:</label><br/>
            <input type="text" v-model='newPerson.firstName'>
        </div>
        <div>
            <label>Last name: </label><br/>
            <input type="text" v-model="newPerson.lastName">
        </div>
        <button v-on:click="sendIdentity()">Submit</button>       
    </div>    
    <script src="myjscode.js"></script>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

myjscode.js:

当我按下按钮提交数据时,我看到了正确的输出console.log(response.data)

let vm = new Vue({
    el: "#container",
    data: {
        newPerson: {
            firstName: '',
            lastName: ''
        }
    },
    methods: {
        sendIdentity: function() {
            let personForm = vm.toFormData(vm.newPerson);
            axios.post('phpfile.php', personForm)
                .then( function(response) {
                    console.log(response.data)
                });
        },
        toFormData: function(obj) {
            let formData = new FormData();
            for(let key in obj) {
                formData.append(key, obj[key]);
            }
            return formData;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

phpfile.php:

在这个文件中,我宁愿执行插入到 MySQL 表中,但它永远不会生效。我删除了 MySQL 代码,只留下以下内容,我注意到Data not received在运行此文件时我总是收到消息:

<?php
if( isset($_POST['firstName']) && isset($_POST['lastName'])){
   echo $_POST['firstName'];
   echo $_POST['lastName'];      
} else {  
   echo 'Data not received';
}
?>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

更新:

我注意到当我像这样更改上面的myjscode.js 时

axios.post('phpfile.php?todo=something', ...)
Run Code Online (Sandbox Code Playgroud)

然后我将phpfile.php更改为

<?php

if( isset($_GET['todo']) ){
   echo $_GET['todo'];
} else {
   echo 'No todo';
}
?>
Run Code Online (Sandbox Code Playgroud)

我在 PHP 文件中始终显示No todo。因此,在这种情况下,通过 GET 和 POST 发送数据不起作用。

Las*_*tia 5

默认情况下以格式axios发送,您只能获取.requestBodyjson$_POSTform-data

json在 php 中获取此请求,您需要requestBody通过键入以下内容来获取原始数据:file_get_contents('php://input')

也以json格式发送,没有 -vm.toFormData(vm.newPerson)

我已经在我的服务器上创建了 php 文件进行测试。

js文件内容在这里

php文件内容在这里