【问题标题】:Getting a 405 method not allowed exception获取 405 方法不允许异常
【发布时间】:2014-07-16 21:26:28
【问题描述】:

我有一个删除实体的 jquery 脚本(从 gi​​thub 下载)。以下是脚本。

$(document).ready(function() {


var restful = {

    init: function(elem) {
        elem.on('click', function(e) {
            self=$(this);
            e.preventDefault();

            if(confirm('Are you sure you want to delete this record ? Note : The record will be deleted permanently from the database!')) {
                $.ajax({
                    headers: {
                        Accept : "text/plain; charset=utf-8",
                        "Content-Type": "text/plain; charset=utf-8"
                    },
                    url: self.attr('href'),
                    method: 'DELETE',
                    success: function(data) {
                        self.closest('li').remove();
                    },
                    error: function(data) {
                        alert("Error while deleting.");
                        console.log(data);
                    }
                });
            }
        })
    }
};

restful.init($('.rest-delete'));

});

我就这样使用它

{{link_to_route('download.delete','x', ['id' => $download->id], array('class'=> 'rest-delete label label-danger')) }}

对应的laravel路由如下

Route::delete('/deletedownload/{id}', array('uses' => 'DownloadsController@deletedownload', 'as'=>'download.delete'));

但是,当我尝试按下 X(删除按钮)时,出现 405 Method not allowed 错误。错误如下

DELETE http://production:1234/deletedownload/42 405 (Method Not Allowed) . 

这在我的本地沙盒上运行良好。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 不确定这是否是拼写错误,但您的路线是/deletedownload/,但您拨打的是/deletevideo/
  • 那是一个错字.. 我已经更正了.. 基本上有两条路线,一条用于下载,一条用于视频。他们都使用相同的脚本。我在访问它们时遇到了同样的问题。

标签: jquery laravel


【解决方案1】:

您已使用 method:DELETE 而不是在您的 ajax 通话中使用关注

$.ajax({
    headers: {...},
    url: self.attr('href'),
    type:"post",
    data: { _method:"DELETE" },
    success: function(data) {...},
    error: function(data) {...}
});

Laravel 将在POST 中查找_method,如果找到该方法,将使用DELETE 请求。

更新:Because of this answernietonfir 指出)

您可以像这样直接尝试DELETE方法(如果不起作用,请尝试另一种),:

$.ajax({
    headers: {...},
    url: self.attr('href'),
    type:"DELETE",
    success: function(data) {...},
    error: function(data) {...}
});

【讨论】:

  • 方法选项没问题,只是拼错了:它叫做“类型”。 ;-)
  • 所有浏览器都不能使用DELETE方法,这是一种将所需方法发送到postLaravel然后在内部发出DELETE请求的方法。
  • 完全正确,只是search around。 Afaik IE8 在 AJAX 调用中的 PUT/DELETE 有(有)问题,但除了那个恐龙之外,它可以正常工作。
  • @WereWolf-TheAlpha .. 我尝试了这两种方法,但我仍然收到相同的消息.. 加载资源失败:服务器响应状态为 405(方法不允许)跨度>
  • @如果我删除了标题,请再次尝试使用您的代码(两者)我仍然收到消息“不允许删除 ... 405 方法”
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2023-03-23
  • 2011-06-21
相关资源
最近更新 更多