Ich versuche, eine POST -Anforderung mit jQuery auszuführen, erhalte jedoch die Fehlermeldung 405 (Methode nicht zulässig). Ich arbeite mit Laravel 5
Das ist mein Code:
jQuery
<script type="text/javascript">
$(document).ready(function () {
$('.delete').click(function (e){
e.preventDefault();
var row = $(this).parents('tr');
var id = row.data('id');
var form = $('#formDelete');
var url = form.attr('action').replace(':USER_ID', id);
var data = form.serialize();
$.post(url, data, function (result){
alert(result);
});
});
});
</script>
HTML
{!! Form::open(['route' => ['companiesDelete', ':USER_ID'], 'method' =>'DELETE', 'id' => 'formDelete']) !!}
{!!Form::close() !!}
Regler
public function delete($id, \Request $request){
return $id;
}
Der Jquery-Fehler lautet http: //localhost/laravel5.1/public/empresas/eliminar/5 405 (Methode nicht zulässig).
Der URL-Wert ist
http://localhost/laravel5.1/public/empresas/eliminar/5
und der Datenwert ist
_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.
Wenn ich zu $.get
request wechsle, funktioniert es gut, aber ich möchte eine Post-Anfrage machen.
Kann mir jemand helfen?
Vielen Dank.
BEARBEITEN!!
Route
Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => '[email protected]']);
Die Ausnahme methodNotAllowed
gibt an, dass für die angeforderte HTTP-Methode keine Route vorhanden ist.
Ihr Formular ist so eingerichtet, dass es eine DELETE
-Anforderung ausgibt. Daher muss Ihre Route Route::delete()
verwenden, um diese Anforderung zu erhalten.
Route::delete('empresas/eliminar/{id}', [
'as' => 'companiesDelete',
'uses' => '[email protected]'
]);
Die Datei routes.php muss korrekt eingerichtet sein.
Ich gehe davon aus, dass Ihr aktuelles Setup so ist:
Route::post('/empresas/eliminar/{id}','[email protected]');
oder so. Definieren Sie stattdessen eine Route für die Löschmethode.
Route::delete('/empresas/eliminar/{id}','[email protected]');
Wenn Sie jetzt eine Routenressource verwenden, lautet der Standard-Routenname, der für die 'DELETE'-Methode verwendet werden soll, .destroy. Definieren Sie stattdessen Ihre Löschlogik in dieser Funktion.
Wenn Sie die resource routes verwenden, können Sie im HTML-Body des Formulars method_field helper wie folgt verwenden:
<form>
{{ csrf_field() }}
{{ method_field('PUT') }}
<!-- ... -->
</form>
Es wird eine verborgene Formulareingabe mit dem Methodentyp erstellt, der von Laravel 5.5+ korrekt interpariert wird.
Seit Laravel 5.6 können Sie folgende Blade-Anweisungen in den Vorlagen verwenden:
<form>
@method('put')
@csrf
<!-- ... -->
</form>
Ich hoffe, dass dies in Zukunft jemandem helfen kann.
Dies könnte jemandem helfen, also werde ich meine Eingaben auch hier setzen.
Ich bin auf das gleiche (oder ein ähnliches) Problem gestoßen. Anscheinend war das Problem, dass die POST Anfrage von Modsec nach den folgenden Regeln blockiert wurde: 350147, 340147, 340148, 350148
Nachdem ich die Anfrage blockiert hatte, wurde ich auf den gleichen Endpunkt umgeleitet, aber natürlich als GET-Anfrage und damit auf die 405.
Ich habe diese Regeln auf die Whitelist gesetzt und voila, der 405-Fehler war weg.
Hoffe das hilft jemandem.
Wenn die Methode delete in form verwendet wird, muss die Route gelöscht werden
Route::delete("empresas/eliminar/{id}", "[email protected]");