Fortune
Fortune

Reputation: 1605

How to pass data from ajax to laravel 5.2 controller via post method

Hello StackOverflow family. This is my very first question and I hope to get help.

I'm new to laravel framework and am using version 5.2 in my project. Am trying to pass data using the post method from my ajax function to a particular controller method but no data is passed to the controller.

I followed the steps in this forum https://laracasts.com/discuss/channels/laravel/process-data-in-controller-using-ajax-in-laravel but can't get it to work. Here is what I've done so far.

My JavaScript (post_script.js):

$.ajax({
    method: 'POST',
    url: './home',
    data: {
        userID: 76,
        userName: 'Jimmy'
     },
});

Note that this file is saved in assets/js directory in the laravel structure. Here is what I have in my route file (routes.php):

Route::get('/', "MyController@home");
Route::get('home', "MyController@home");

Here is the function I have in MyController.php file:

function home(Request $request) {
    $userID = $request['userID'];
    $userName = $request['userName'];
    return view('home', [
      'userID'=> $userID,
      'userName' => $userName
    ]);
}

In my view, I tried to access it like this:

<p>User ID: {{$userID}}</p>
<p>User Name: {{$username}}</p>

Nothing is displayed! Please what am I doing wrong? I need your help. Forgive me if my question is not proper but I hope you get what I mean. Thank you

Upvotes: 7

Views: 17250

Answers (5)

Abdelghafour Ennahid
Abdelghafour Ennahid

Reputation: 63

you can use route name to pass your data to the controller

 $.ajaxSetup({
            headers:{'X-CSRF-TOKEN': $("meta[name='csrf-token']").attr('content')}
        });
        $.ajax({
            type:'POST',
            url: '{{route("route_name_with_post_method")}}',
            data:{
              'id': data
            },
            success:function(r){

            },error:function(r) {

            }
        });

Upvotes: 0

Don&#39;t Panic
Don&#39;t Panic

Reputation: 14510

Your AJAX is POSTing, but you have no POST route set, only GET. Add a POST route, like so:

Route::post('home', "MyController@home");

Upvotes: 10

Malvolio
Malvolio

Reputation: 366

First check with your developer/network tool (eg. firebug) wether your ajax call reaches the desired controller/functions and that the parameters are forwarded correctly.

A safe way to specify Url in the ajax call in the Laravel environment is using the URL facade like this:

url: "{{ URL::to('home'); }}",

In order to do it like this however you must store your js as a myscript.blade.php (!!) file and @include it into your view accordingly.

For receiving your posted parameters in the controller function there is no need to declare function arguments, you can simply use the Input::Get() function eg. like this:

public function home()
{
  $userID = Input::Get('userID');
  $userName = Input::Get('userName');
  return view('home', [ 'userID'=> $userID, 'userName' => $userName ]);
}

Upvotes: 3

user2058653
user2058653

Reputation: 733

If you try to do POST request you may need to have X-CSRF-Token.

Add this to meta:

<meta name="csrf-token" content="{{ csrf_token() }}">

And setup your AJAX:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

In Laravel docs: https://laravel.com/docs/5.2/routing#csrf-x-csrf-token

Upvotes: 1

Ivan Wong
Ivan Wong

Reputation: 226

First you need set up dataType for ajax request like this (if you using jQuery)

 $.ajax({
    method: 'POST',
    url: './home',
    dataType: 'json'
    data: {
        userID: 76,
        userName: 'Jimmy'
     },
})

then try use into your controller as follow

Request::json()

and see result

Also you may use Input::get() :

Request::get('userID')

Upvotes: 0

Related Questions