J'essaie de supprimer un enregistrement en utilisant ajax, dans laravel 5.4, je sais que c'est l'une des questions courantes et il existe déjà de nombreuses solutions et didacticiels en ligne disponibles sur ce sujet. J'ai essayé certains d'entre eux, mais la plupart me donnent la même erreur NetworkError: 405 Method Not Allowed. J'ai essayé de faire cette tâche sous un angle différent mais je suis coincé et je n'ai pas trouvé où je me trompe, c'est pourquoi j'ai ajouté cette question à titre indicatif.
J'essaie le script suivant pour supprimer l'enregistrement. p>
IN Route:
$(".deleteRecord").click(function(){ var id = $(this).data("id"); var token = $("meta[name='csrf-token']").attr("content"); $.ajax({ url: /admin/article/delete/{{article}}, type: 'DELETE', data: { "id": id, "_token": token, }, success: function (){ console.log("it Works"); } }); });
Dans Controller:
<li name="csrf-token" content="{{ csrf_token() }}"> <a class="deleteRecord" href="/admin/article/delete/{{$article->id}}"> <i class="icon-bin"></i>delete </a> </li>
3 Réponses :
Le problème (pour autant que je sache) se situe ici:
$(".deleteRecord").click(function(event){ event.preventDeault();
Dans votre vue, vous créez une variable nommée id
et la valeur est basée sur data-id
attrribute.
url: "article/delete/"+id
Mais dans votre balise a
, vous n'avez pas d'attribut data-id
. Il faut donc l'ajouter (quelque chose comme ça):
article/{article}
Également dans votre appel ajax
, l ' url
est incorrect (en fonction de ce que vous avez défini dans les routes:
Appel Ajax:
article/delete/{article}
Route: strong>
url: "article/"+id
Donc, soit changez la route:
<a class="deleteRecord" href="/admin/article/delete/{{$article->id}}" data-id="{{$article->id}}">
soit changez l'appel ajax
:
var id = $(this).data("id");
Et encore une chose. Vous devez empêcher l'action de balise a
par défaut. Modifiez l'événement comme ceci:
<a class="deleteRecord" href="/admin/article/delete/{{$article->id}}">
MDR. Hé mon pote. Avez-vous essayé la dernière partie: route
et ajax
.
MethodNotAllowedHttpException
Votre ajax fonctionne-t-il? Je veux dire que l'URL ne devrait pas changer. Si l'URL change, l'événement de clic ne fonctionne pas.
@ Rouhollah Mazarei oui tout est bien mais montrez-moi l'exception http.
Obtenez-vous l'erreur dans le navigateur ou dans l'onglet réseau
dans les outils de développement?
Vous vous trompez dans de nombreux endroits. Essayez cette
Route
$(".deleteRecord").click(function(){ var id = $(this).data("id"); var token = $("meta[name='csrf-token']").attr("content"); $.ajax({ url: "article/delete/"+id, type: 'POST', dataType: 'json', data: { _method: 'DELETE', submit: true, _token: token, }, success: function (){ console.log("it Works"); } }); });
Controller
<button class="deleteRecord" data-id="{{$article->id}}"><i class="icon-bin"></i>delete</button>
Vue
public function delete_article($article) { article::where('id', $article)->delete(); return response()->json([ 'success' => 'Record deleted successfully!' ]); }
AJAX
Route::delete('article/delete/{article}', 'ArticleController@delete_article')->name("delete_article");
changez-vous tout selon ma réponse?
@ zahid hasan emon oui je fais
vous obtenez toujours une exception non autorisée?
C'est du travail pour moi: Dans Route
$(".deleteRecord").each(function () { $(this).on("click", function () { var $tr = $(this).closest('tr'); var id = $(this).attr("data_id"); swal({ title: "Are you sure to Delete!", text: "***", icon: "warning", buttons: [ 'cansle!', 'yes' ], dangerMode: true, }).then(function(isConfirm) { if (isConfirm) { $.ajax({ url: '/admin/article/delete', type: 'post', dataType: 'json', data: {_token: "{{csrf_token()}}" , id:id}, success: function () { swal({ title: "article deleted succesfuly", icon: "success", type: 'success', }) $tr.find('td').fadeOut(1000,function(){ $tr.remove(); }); } }) } }) }); });
IN Controller
<td> <a class="deleteRecord" data_id="{{$article->id}}"> <i class="icon-bin" style="color: black"></i></a> </td>
dans View:
public function delete_article(Request $request) { $id=$request['id']; article::where('id', $id)->delete(); return response()->json(['articleDelete' => 'success']); }
Dans AJAX:
Route::post('/article/delete', 'ArticleController@delete_article');//Ajax Routes