Nahid Hasan
Nahid Hasan

Reputation: 707

Why method not allowed http exception?

I have a form in laravel.

I want to send the data to server using ajax post request.

The laravel give me error. I dont know why?

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

(1/1) MethodNotAllowedHttpException

in RouteCollection.php (line 251)

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

in RouteCollection.php (line 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");
}

Upvotes: 0

Views: 603

Answers (3)

rubyshine72
rubyshine72

Reputation: 132

Because you did not add CSRF token value as a hidden type.

You must add CSRF hidden input to Form.

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

Upvotes: 0

linktoahref
linktoahref

Reputation: 7972

Pass the CSRF token along with the request, after changing your route definition to either remove {name} or making it optional {name?} then change your data to

$(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)
            }
        });
    });

});

The input type should be text instead of name in the form

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

Upvotes: 0

Amarnasan
Amarnasan

Reputation: 15529

You defined a a route for /search/parameter, but your action is only '/search'.

Remove the useless {name} part in the route. Or make it optional with {name?}

Upvotes: 1

Related Questions