1
votes

Laravel ne supprime pas l'enregistrement via ajax?

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>


0 commentaires

3 Réponses :


0
votes

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}}">


5 commentaires

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?



0
votes

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");


3 commentaires

changez-vous tout selon ma réponse?


@ zahid hasan emon oui je fais


vous obtenez toujours une exception non autorisée?



1
votes

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


0 commentaires