Я пытаюсь отправить форму, используя AJAX и VueJs. Но почему-то у меня не получается этого добиться. Я всегда получаю пустой объект Illuminate\Http\Request
.
Файл лезвия:
<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
, а также удалил аргумент Request $request
из маршрута post
. И изменил передаваемый параметр на объект из строки.
Сделав это, сделал для меня работу, которую я искал. Почему я не знаю. Я все еще ищу кого-то, кто может объяснить это мне.
Почему добавление пространства имен Iluminate\Http\Request
в файл routes.php
не сработало, как я ожидал, и его удаление выполнило задачу?
Кто-нибудь может сказать мне, почему это не сработало раньше? Любая помощь высоко ценится.
P.S. Недавно я начал изучать компоненты VueJs.
createAdministrator()
попробуйте отправитьthis.username
в качестве данных запроса и посмотрите, что вы получите. например:createAdministrator(){this.$http.post('/admin', this.username).then(response => {console.log(response);})
- person Donkarnash   schedule 29.06.2016