J'essaie de faire une demande POST avec jQuery mais je reçois une erreur 405 (méthode non autorisée), je travaille avec Laravel 5
C’est mon 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() !!}
Manette
public function delete($id, \Request $request){
return $id;
}
L'erreur Jquery est http: //localhost/laravel5.1/public/empresas/iminar/5 405 (méthode non autorisée).
La valeur de l'URL est
http://localhost/laravel5.1/public/empresas/eliminar/5
et la valeur de données est
_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.
Si je passe à la demande $.get
cela fonctionne bien, mais je veux faire une demande de publication.
Quelqu'un pourrait m'aider?
Merci.
MODIFIER!!
Route
Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => 'CompaniesController@delete']);
L'exception methodNotAllowed
indique qu'il n'existe pas de route pour la méthode HTTP que vous demandez.
Votre formulaire est configuré pour faire une demande DELETE
, votre itinéraire doit donc utiliser Route::delete()
pour le recevoir.
Route::delete('empresas/eliminar/{id}', [
'as' => 'companiesDelete',
'uses' => 'CompaniesController@delete'
]);
Votre fichier routes.php doit être configuré correctement.
Je suppose que votre configuration actuelle est la suivante:
Route::post('/empresas/eliminar/{id}','CompanyController@companiesDelete');
ou quelque chose. Définissez plutôt un itinéraire pour la méthode de suppression.
Route::delete('/empresas/eliminar/{id}','CompanyController@companiesDelete');
Maintenant, si vous utilisez une ressource Route, le nom de route par défaut à utiliser pour la méthode 'DELETE' est .destroy. Définissez plutôt votre logique de suppression dans cette fonction.
Si vous utilisez les itinéraires resource , dans le corps HTML du formulaire, vous pouvez utiliser method_field helper comme ceci:
<form>
{{ csrf_field() }}
{{ method_field('PUT') }}
<!-- ... -->
</form>
Il créera une entrée de formulaire masquée avec le type de méthode, qui est correctement interprété par Laravel 5.5+.
Depuis Laravel 5.6, vous pouvez utiliser les directives Blade suivantes dans les modèles:
<form>
@method('put')
@csrf
<!-- ... -->
</form>
J'espère que cela pourrait aider quelqu'un à l'avenir.
Lorsque use method delete in form doit alors définir la route delete
Route::delete("empresas/eliminar/{id}", "CompaniesController@delete");