gpt4 book ai didi

php - 在 Laravel 5.1 中使用 VueJs 和 AJAX 提交表单

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:48 25 4
gpt4 key购买 nike

我正在尝试使用 AJAX 和 VueJs 提交表单。但不知何故,我没能做到这一点。我总是得到一个空的 Illuminate\Http\Request 对象。

Blade 文件:

<body>
<div class="container">
<generate-admin></generate-admin>
</div>

<script src="https:http://code.jquery.com/jquery.js"></script>
<script src="{{ url('/js/main.js') }}"></script>
</body>

组件:

<template>
<form id="createAdministrator" @submit.prevent="createAdministrator">

<div class="form-group">

<input type="text"
name="username"
id="txtUserName"
placeholder="Username"
autocomplete="off"
v-model="username"
/>

</div>

<input type="submit" value="Submit">

</form>
</template>

<script>
export default {
data: function() {
return {
username: ''
}
},

methods: {
createAdministrator: function() {
formContents = jQuery("#createAdministrator").serialize();

this.$http.post('/admin', formContents).then(function(response, status, request) {
console.log(response);
}, function() {
console.log('failed');
});
}
}
}
</script>

main.js

import Vue from 'vue';
import GenerateAdmin from './components/GenerateAdmin.vue';

var VueResource = require('vue-resource')
Vue.use(VueResource);

Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#token').getAttribute('content');
Vue.http.options.emulateJSON = true;

new Vue({
el: 'body',

components: { GenerateAdmin }
});

gulpfile.js

var elixir = require('laravel-elixir');

require('laravel-elixir-vueify');

elixir(function(mix) {
mix.browserify('main.js');
});

routes.php

Route::get('/admin/create', function () {
return view('admin.create');
});

Route::post('/admin', function(Request $request) {
// returns an empty object.
return response(['results' => $request]);
});

Route::get('/', function () {
return view('welcome');
});

我得到的返回是:

"{"results":{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}}"

当我在 Chrome 中检查“网络”选项卡的“请求负载”部分时。我确实看到表单已成功提交,无论我在上面的文本框中写入什么数据。

为什么会这样?请指导我在哪里犯了错误?


更新 1:

我正在对上面的代码进行反复试验。我删除了命名空间 Illuminate\Http\Request 并从 post 路由中删除了参数 Request $request。并将传递参数从字符串更改为对象。

这样做,就完成了我一直在寻找的工作。为什么我不知道。我仍在寻找可以向我解释这件事的人。

为什么在 routes.php 文件中添加命名空间 Iluminate\Http\Request 没有像我预期的那样工作,而删除它完成了任务?

谁能告诉我为什么没有早点解决?非常感谢任何形式的帮助。


P.S.:最近开始学习VueJs Components。

最佳答案

作为我遵循的一般做法,任何需要传递给 laravel Controller 的表单数据都作为 json 对象从 vue 前端传递。然后在 laravel Controller 中(在你的情况下路由具有闭包函数)使用 $request->get('key') 检索接收到的 json 对象的值。
所以在你的情况下,组件代码可以是

    <template>
<form id="createAdministrator" @submit.prevent="createAdministrator">

<div class="form-group">

<input type="text"
name="username"
id="txtUserName"
placeholder="Username"
autocomplete="off"
v-model="username"
/>

</div>

<input type="submit" value="Submit">

</form>
</template>

<script>
export default{
template:require('./generate-admin-template.html'),
data() {
return {
username: ''
}
},
computed:{
formData(){
return {
username:this.username
}
}
},
methods: {
createAdministrator: function() {
this.$http.post('/admin', this.formData).then(function(response) {
console.log(response);
}, function() {
console.log('failed');
});
}
}
}
</script>

然后在你的routes.php文件中

<?php
use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

Route::get('/', function () {
return view('welcome');
});

Route::get('/admin/create', function () {
return view('admin.create');
});

Route::post('/admin', function (Request $request) {
return response(['results' => $request->get('username')]);
});

我猜 Illuminate\Http\Request 实例返回一个 $request - Collection 所以我们需要使用 Collections 上可用的方法 访问这些值>.
我已经测试了上面的代码以及您的 main.js'/admin/create' 代码。
还有一件事 - 我认为如果您将序列化的表单数据发送到 Controller ,那么在 Controller 内它需要被反序列化以获得包含 $key=>$value 对的对象或数组方便获取所需数据。

关于php - 在 Laravel 5.1 中使用 VueJs 和 AJAX 提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38093745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com