Ich versuche, Ajax-Funktionalität zu einem Like-Button hinzufügen.Formular Umleitung zu Route auf AJAX-Anfrage in Laravel 5
Alles funktioniert, außer dass ich auf eine Seite mit JSON-Daten weitergeleitet werde, nachdem ich auf die Schaltfläche "Gefällt mir" geklickt habe.
Ich benutze e.preventDefault()
und es leitet mich immer noch um.
Wenn ich on('click')
verwende, bekomme ich einen TokenMismatch
Fehler im Konsolenprotokoll, obwohl ich eine versteckte Eingabe mit einem Token enthalten habe.
jquery.min.js: 4 POST http://localhost/socialnet/public/likeStatus 500 (Internal Server Error)
Wenn ich on('submit')
die Daten verwenden, durchläuft aber ich habe auf die Seite mit der JSON-Antwort umgeleitet.
Dies ist in meinen Controller [email protected]()
public function likeStatus() {
if (Input::has('like_status')) {
$status = Input::get('like_status');
$selectedStatus = Status::find($status);
$selectedStatus->likes()->create([
'user_id' => Auth::user()->id,
'status_id' => $status
]);
$response = array(
'status' => 'success',
'msg' => 'You have liked this status',
);
return Response::json($response);
}
}
Der Blick
{!! Form::open(['action' => '[email protected]', 'id' => 'like_form']) !!}
{!! Form::hidden('like_status', $status->id) !!}
{!! Form::hidden('user_id', Auth::user()->id) !!}
<button type="submit" name="likeStatus" class="btn btn-info btn-xs" id="like-status">
<i class="fa fa-thumbs-up"></i> Like ({{ $likes_count }})
</button>
{!! Form::close() !!}
Die Javascript
$('#like-status').on('click', function(e){
e.preventDefault();
var status_id = $('input[name=like_status]').val();
var user_id = $('input[name=user_id]').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').val()
}
});
$.ajax({
url: 'http://localhost/socialnet/public/likeStatus',
method: 'post',
data: {status_id: status_id, user_id: user_id},
success: function(data) {
console.log(data.msg);
}
});
});
EDIT: Habe ich nur noch die CSRF-Token in eine Variable und hinzugefügt es zum data
var status_id = $('input[name=like_status]').val();
var user_id = $('input[name=user_id]').val();
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url: 'http://localhost/socialnet/public/likeStatus',
method: 'post',
data: {status_id: status_id, user_id: user_id, _token: CSRF_TOKEN},
success: function(data) {
console.log(data.msg);
}
});
Dies gibt Status Code: 200
in der Registerkarte Netzwerk, sondern gibt undefined
in der Konsole und keine Daten durchmacht.
EDIT 2: Etwas sehr komisches geschieht. Ich bekomme undefined
in der Konsole, wenn ich versuche, den neuesten Status zu mögen, und nichts passiert. Aber es funktioniert, wenn ich den vorherigen (alten) Status mag, aber wenn ich auf den "Gefällt mir" -Button klicke, werde ich auf die JSON-Datenseite weitergeleitet und die Daten gehen durch.
Was mache ich falsch?
Haben Sie var_dump in PHP ausprobiert? Hast du etwas bekommen? – Yanaro