2017-08-16 64 views
0

我知道有几个关于使用AJAX删除错误的帖子。但是,我发现的帖子中没有任何解决方案为我工作。Laravel Ajax删除:405错误 - 不允许的方法

我有一个表格显示我的数据库的机床表中的所有机器。在每一行有一个删除按钮来删除机器,像这样:

<button class="btn btn-small btn-danger delete-machine" 
    type="button" 
    title="Delete Machine" 
    machine-id="{{ $value->machineId }}"> 
    <span class="glyphicon glyphicon-trash"></span> 
</button> 

上按一下按钮,下面的JavaScript执行这就要求在控制器中的破坏方法从数据库中删除机器:

$(document).on('click', ".delete-machine", function() { 
    let button = $(this); 
    let id = $(this).attr('machine-id'); 
    let tr = $(this).closest('tr'); 
    let didConfirm = confirm("Are you sure you want to permanently delete this machine?"); 

    if (didConfirm) { 
     $.ajax({ 
      type: 'DELETE', 
      url: 'machines/' + id, 
      data: { 
       '_token' : $('input[name="_token"]').val(), 
       'id' : id 
      }, 
      success: function(response) { 
       if (response.didSucceed) { 
        tr.remove(); 

        let flashMessage = '<div class="alert alert-success alert-block"><button type="button" class="close" data-dismiss="alert">×</button><strong>' 
         + response.message + 
         '</strong></div>'; 
        $('#flash-message').append(flashMessage); 
       } else { 
        let flashMessage = '<div class="alert alert-error alert-block"><button type="button" class="close" data-dismiss="alert">×</button><strong>' 
         + response.message + 
         '</strong></div>'; 
        $('#flash-message').append(flashMessage); 
       } 
      }, 
      error: function (response) { 
       console.log('Error:', response);    
      } 
     }); 
    } 
}); 

我的控制器是资源控制器。这里是路线:

Route::resource('machines', 'Machine\MachineController'); 

这是被调用的控制器的销毁方法。它首先从用户订阅表中删除引用机器的所有行。然后,它会删除本机:

public function destroy($id) 
{ 
    $userMachineSubscriptions = UserMachineSubscription::where('machine_id', $id)->get(); 

    foreach($userMachineSubscriptions as $userMachineSubscription) { 
     $userMachineSubscription->delete(); 
    } 

    $userMachineSubscriptions = UserMachineSubscription::where('machine_id', $id)->count(); 

    if ($userMachineSubscriptions <= 0) { 
     $machine = Machine::find($id); 

     if ($machine->delete()) { 
      $message = 'Machine "' . $machine['name'] . '" successfully deleted!'; 
      return response()->json(['didSucceed' => 'true', 'message' => $message]); 
     } else { 
      $message = 'Machine "' . $machine['name'] . '" was not deleted.'; 
      return response()->json(['didSucceed' => 'false', 'message' => $message]); 
     } 
    } else { 
     $message = 'Error performing cascading delete on user subscriptions. Machine was not deleted.'; 
     return response()->json(['didSucceed' => 'false', 'message' => $message]); 
    } 
} 

当我运行PHP的工匠路线:列表中,我看到我的路线:

Method: DELETE 
URI: machines/{machine} 
Middleware: web, auth 
Name: machines.destroy 
Action: App\Http\Controllers\Machine\[email protected] 

我在做什么错?使用Laravel 5.4。

...

此外,在一个侧面说明,我是新来的网络发展中,如果有人看到任何东西在我的代码,可好歹得到改善,我很开放地学习:)比如,我有点不喜欢我成功显示闪光消息的方法。我这样做了几个Ajax请求,并希望我可以做会话::闪存或其他东西,而不是将HTML附加到我的主刀片布局中的div。但是,我似乎无法找到一个更好的方式来做到这一点。

UDPATE:已解决。只需要清除路由缓存。 :(

回答

1
php artisan route:list 

看,如果你要发送删除请求被允许在航线或没有,你也可以尝试route:clear.清除路由缓存。

+0

我更新我的职务。我做 – JonTan

+0

哦,我的,我想路由缓存是问题....清除我的路由缓存,它开始工作。 不能相信我花了这么多的时间在这个...: ( – JonTan