2017-10-01 43 views
0

AJAXの削除を使用している405件のエラーがあります。しかし、私が見つけた投稿からの解決策はどれも私のために働いていませんでした。LAREAvelのDELETE Ajaxリクエストで405(Method Not Allowed)エラーが発生しました。

データベーステーブルのすべての製品を表示するテーブルがあるビューがあります。各行にそうような製品を削除するための削除ボタンがある:ボタンをクリックし、データベースから商品を削除するために、コントローラにdestroyメソッドを呼び出し、次のJavaScriptを実行オン

{!! Form::open(['method' => 'DELETE', 'route' => ['slider.destroy', $slide->id]]) !!} 
    <button type="button" class="deleteproductModal btn btn-xs btn-default btn-flat" 
      data-toggle="modal" 
      data-product_token="{{ csrf_token() }}" 
      data-product_name="{{ $slide->title_slider }}" 
      data-product_destroy_route="{{ route('slider.destroy', $slide->id) }}"> 
     <i class="fa fa-trash"></i> 
    </button> 
{!! Form::close() !!} 

$('button.deleteproductModal').click(function() 
{ 
    var productRoute = $(this).attr("data-product_destroy_route"); 
    var productName = $(this).attr("data-product_name"); 
    var productToken = $(this).attr("data-product_token"); 
    deleteproduct(productRoute, productToken, productName); 
}); 

function deleteproduct(productRoute, productToken, productName) 
{ 
    swal({ 
     title: "Window product Deletion", 
     text: "Are you absolutely sure you want to delete " + productName + "? This action cannot be undone." + 
     "This will permanently delete " + productName + ", and remove all collections and materials associations.", 
     type: "warning", 
     showCancelButton: true, 
     closeOnConfirm: false, 
     confirmButtonText: "Delete " + productName, 
     confirmButtonColor: "#ec6c62" 
    }, function() 
    { 
     $.ajax({ 
      type: "DELETE", 
      url: productRoute, 
      headers: { 'X-CSRF-TOKEN' : productToken } 
     }) 
      .done(function(data) 
     { 
      swal("Window Product Deleted!", productName + " Window Product was successfully delete.", "success"); 
     }) 

      .error(function(data) 
     { 
      swal("Oops", "We couldn't connect to the server!", "error"); 
     }); 

    }); 
} 

私のコントローラはリソースコントローラです。ルートは次のとおりです。

Route::resource('slider','Backend\SliderController'); 

ここでは、呼び出されているコントローラからの破壊方法があります。

public function destroy($id) 
{ 
    $home= Slider::find($id); 

    unlink($home->featured_image); 

    $home->delete(); 
    notify()->flash('<h3>Deleted successfully</h3>', 'success', ['timer'=>2000]); 
    return redirect('slider'); 

} 

私は、我々は、サーバー甘い警告エラーに接続するcouldntのおっと取得製品を削除

が、私の新鮮なデータが削除されたページ....任意のヘルプ?

+0

ないように注意してください、しかし、あなた自身は、javascriptを前に提出does notのフォームが実行されていることを確認していますか?私はどのタイプのボタンも送信していないと思うので...そうではありません。ああ、そこにはたくさんのものがあります。/とにかくajaxリクエストを使うつもりなら、あなたは開いて閉じる必要があると思います。 –

+0

まず、ボタンごとにフォームを用意する必要はありません。すべてのボタンに対して1つのフォームを作成するか、フォームを削除して、代わりにページにトークンを追加してください。次に、あなたのアヤックスが発砲しているのか、それともすぐに提出したのかを把握しなければなりません。あなたのajaxが発砲している場合は、あなたのPHPコードにエラーがあるかもしれません。 Google Chromeでは、デベロッパーコンソールでリクエストデータを確認できます。より多くの情報を提供すれば、より有用なデータを得ることができます。 –

答えて

2

あなたはPOST AJAXタイプを設定しますが、このように削除した値で_methodという名前のパラメータを送信する必要があります。「それはあなたのように、自動的に_method、隠し入力を生成して、あなたがlaravel htmlフォームヘルパーを使用しているため

$.ajax({ 
     type: "POST", 
     data:{ 
     _method:"DELETE" 
     }, 
     url: productRoute, 
     headers: { 'X-CSRF-TOKEN' : productToken } 
    }); 

かD良く、このようなこのようなトークンおよび方法として、すべてのフォーム入力を送信します。

function() 
{ 

    var formData=$('#yourForm').serialize(); 
    $.ajax({ 
     type: "POST", 
     url: productRoute, 
     data:formData 
    }) 
     . 
     . 

}); 
+0

Tnx men!それは働いたが、私はページをリフレッシュした後に製品を取り除く... –

+0

この時点以降、jqueryのスキルを使用しなければならない。たとえば、ajaxリクエストの直後にアイテムを削除したいので、削除したいhtml要素にアイテムのIDを渡すことができます。このidはこのように "data-to-remove = '#23 ''今すぐajaxの成功関数でこれを行うことができます:$($( "#yourForm")。data( 'to-remove'))。 –

関連する問題