为什么方法不允许http异常?

时间:2017-12-14 10:18:13

标签: javascript laravel

我在laravel中有一个表格。

我想使用ajax post request将数据发送到服务器。

laravel给我错误。我不知道为什么?

My view source url is  :  http://localhost/lily/public/search

(1/1)MethodNotAllowedHttpException

  

在RouteCollection.php(第251行)

     

在RouteCollection-> methodNotAllowed(array('GET','HEAD'))

     RouteCollection.php中的

(第238行)

<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
        crossorigin="anonymous"></script>
    </head>
    <body>
        <script type="text/javascript">
            $(document).ready( function () {
                $("#submit").submit( function(){
                    var name = $("#name").val();
                    console.log(name);
                    $.ajax({
                        type: "POST",
                        url :  "{{url('/search')}}",
                        data : name ,
                        success : function(data)
                        {
                            console.log(data)
                        },

                        error : function(error)
                        {
                            console.log(error)
                        } 
                    });
                });
            });
        </script>

        <div class="col-md-6 offset-3">
            <form id="submit" method="POST">
                <input type="name" name="name" id="name">
                <button type="submit" class="btn btn-success">search</button>
            </form>
        </div>
    </body>
</html>

Route::post('/search/{name}', 'HomeController@in');

public function in() {
    return json("fdfdfdfdfdf");
}

3 个答案:

答案 0 :(得分:1)

您为/ search /参数定义了一条路线,但您的操作仅为&#39; / search&#39;。

删除路线中无用的{name}部分。或者使用{name?}

使其可选

答案 1 :(得分:0)

在将路线定义更改为删除{name}或将其设为可选{name?}后,将CSRF令牌与请求一起传递,然后将data更改为

$(document).ready(function() {

    $("#submit").submit(function() {

        e.preventDefault(); // Prevent the Default Form Submission
        var name = $("#name").val();
        console.log(name);

        $.ajax({
            type: "POST",
            url: "{{ url('/search') }}",
            data: {
                name: name,
                _token: "{{ csrf_token() }}"
            },
            success: function(data) {
                console.log(data)
            },
            error: function(error) {
                console.log(error)
            }
        });
    });

});

输入类型应为text,而不是{/ p>形式的name

<input type="text" name="name" id="name">

答案 2 :(得分:0)

因为您没有将CSRF令牌值添加为隐藏类型。

您必须将CSRF隐藏输入添加到表单。

<input type="hidden" name="_token" value="{{ csrf_token() }}" />