【问题标题】:ajax request throwing 405 method not found error (Laravel 5)ajax 请求抛出 405 方法未找到错误(Laravel 5)
【发布时间】:2015-12-26 13:00:42
【问题描述】:

我正在从表单进行 ajax 调用以将复选框数据发送到控制器。下面是相关的html代码:

 <form method="POST" action="http://192.168.1.25/nonresponsiveurl" accept-charset="UTF-8" class="del_form" id="del_form" name="del_form"><input name="_token" type="hidden" value="igr6iMt1WfeZunyG8wpyy1tNK1efgiclyOvZ1hkF">
  <input id="submit" type="submit" name="submit" value="Delete Checked Records" onclick="return submitDelForm();">
   <div class="table-responsive shadow-edge-nofill">

    <table class="table table-striped">
                    <tbody>
                    <tr>
            <td><input id="badURL0" class="bad_url_checkbox" name="bad_url_checkbox" type="checkbox" value="2"></td>

    etc....etc.....etc....

    </form>

这里是相关的javascript代码:

  <script type="text/javascript">
    function submitDelForm(){
        $('div#loadmoreajaxloader').show();
        var form = document.del_form;
        var dataString = $(form).serialize();
        $.ajaxSetup({
            headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
        });
        $.ajax({
            type: 'POST',
            URL: '/delbadurl',
            contentType: "application/json; charset=utf-8",
            data: {'serial_data' : dataString},
            success: function(data){
                $('div#loadmoreajaxloader').hide();
            }
        });
    }
</script>

这里是相关路由:

  Route::post('delbadurl','Admin\DashboardController@delBadURL' );

我可以确认 CSRF 令牌已附加到数据字符串。表单数据也被附加到 dataString 中。但是,jquery 会抛出 405 错误。

我正在使用许多其他类似的 ajax 函数来获取和发送数据。除了这个特定的功能外,一切都完美无缺。一些指针将不胜感激,因为我空手而归。

【问题讨论】:

  • 首先405不是jQuery错误,而是http错误。您很可能会收到此错误,因为您使用的表单 URL (http://192.168.1.25/nonresponsiveurl) 不存在或无法访问。您没有采取任何措施来阻止表单的标准 html 提交。所以这就是让你进入405 页面的原因,我猜。
  • 为了排查问题,我建议你提交不带AJAX的表单,看看你得到了什么......
  • 您的仪表板控制器中是否存在 delBadURL?
  • @low_rents,你也许是对的。如何防止发生标准表单提交?我要做的就是将表单数据传递给 jquery 脚本,该脚本会将其传递给控制器​​。 jquery 脚本会在控制器执行完代码后重建视图。

标签: jquery ajax laravel-5


【解决方案1】:

就像我在评论中所说,您的表单似乎是以默认 (HTML) 方式提交的。

为了防止您可以使用 jQuery 事件处理。 为此,您应该首先从您的&lt;input type="submit" ...&gt; 中删除onclick 属性。
然后将事件处理程序绑定到 submit-event 并使用preventDefault() 阻止表单提交的默认行为:

$("#del_form").on("submit", function(event){
    event.preventDefault();
    //your ajax code goes here...
});

【讨论】:

  • 这个方法还是不行。我收到 405 错误 POST 192.168.1.25/dashboard 405 (Method Not Allowed)n.ajaxTransport.k.cors.a.crossDomain.send @ jquery.js:8625n.extend.ajax @ jquery.js:8161(anonymous function) @ VM34299: 11n.event.dispatch@jquery.js:4430n.event.add.r.handle@jquery.js:4116
  • 这里没有跨域请求,所以我不确定消息。
  • @hvs 好吧,我不知道 - 很难远程调试您的问题。也许你可以用 jsfiddle 复制你的问题。如果您的错误控制台告诉您这是一个跨域请求,那么很可能是。游戏机从不撒谎;)
【解决方案2】:

我认为你应该在你的 Ajax 提交中使用 'url':'/some-text/another-text 而不是 'url':'some-text/another-text。也就是说 .... 有一个 /在第一个 url 部分之前。这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2018-02-28
    • 2019-03-25
    • 2015-10-15
    • 2012-01-04
    相关资源
    最近更新 更多