Ich versuche, ein Formular mit AJAX und VueJs zu senden. Aber irgendwie gelingt es mir nicht. Ich bekomme immer ein leeres Illuminate\Http\Request
Objekt.Formular mit VueJs und AJAX in Laravel senden 5.1
Die Klinge Datei:
<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>
die Komponente:
<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');
});
Was ich im Gegenzug ist:
"{"results":{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}}"
Als ich die Anfrage-Payload Abschnitt Netzwerk Tab in Chrome überprüfen. Ich sehe, dass das Formular mit den Daten, die ich in das Textfeld oben geschrieben habe, erfolgreich eingereicht wurde.
Warum passiert das? Bitte führen Sie mich, wo ich den Fehler gemacht habe?
UPDATE 1:
Ich war oben mit dem Code Versuch und Irrtum zu spielen. Und ich entfernte den Namensraum Illuminate\Http\Request
und entfernte auch das Argument Request $request
von der post
Route. Und den Übergangsparameter von String auf Objekt geändert.
So tun, hat die Arbeit für mich, die ich gesucht. Warum ich nicht weiß. Ich suche immer noch jemanden, der mir das erklären kann.
Warum das Hinzufügen des Namespace Iluminate\Http\Request
in routes.php
Datei funktionierte nicht, wie ich es erwartet hatte und es entfernt die Aufgabe?
Kann mir jemand sagen, warum es früher nicht geklappt hat? Jede Art von Hilfe wird sehr geschätzt.
P. S .: Ich begann vor kurzem VueJs Komponenten zu lernen.
Ich habe noch nie jQuery(). Serialize() versucht, stattdessen bevorzuge ich ein JSON-Datenobjekt in Vue-Komponente und dann senden Sie dieses Datenobjekt mit der Post-Anfrage. Versuchen Sie in Ihrem 'createAdministrator()' 'this.username' als Anfragedaten zu senden und sehen Sie, was Sie bekommen. für ex: 'createAdministrator() {this. $ http.post ('/ admin', this.username) .dann (response => {console.log (Antwort);})' – Donkarnash
@Donkarnash Nö .. Das auch nicht 't hat gearbeitet .. Selbe Sache ist passiert .. Ein leeres Objekt zurückgegeben .. –
Nur eine Ahnung, habe es nicht ausprobiert. Aber liefert nicht .serialize() einen String wie: "username = WhateverTheInputIs"? Ich denke, was Sie wollen, ist ein Objekt wie: {'Benutzername': WhateverTheInputIs}. – Liren