Sharon Haim Pour
Sharon Haim Pour

Reputation: 6713

Laravel 5: Fetch ajax data in route and pass to controller

I'm using Laravel 5 and want to make ajax call to a controller with some data:

 $.ajax({
    url : "/getOrgById",
    data : JSON.stringify({id:1})
})

The routes.php has:

Route::get('/getOrgById', 'HomeController@getOrgById');

HomeController.php:

public function getOrgById($data) {
   //code here fails with message 'Missing argument 1 for HomeController::getOrgById()
}

How can I pass the data from ajax to route and then to controller?

Upvotes: 5

Views: 28438

Answers (7)

user5065694
user5065694

Reputation: 23

ajax:

$.ajax({
    type:'get',
    url:'/getOrgById',
    data:{
        id:1
    },
    success:function(res){
    }

});

routes.php:

Route::get('/getOrgById', 'HomeController@getOrgById');

HomeController.php:

public function getOrgById(Request $request) {
    dd($request);
}

Upvotes: 0

CrsCaballero
CrsCaballero

Reputation: 2348

Try with this,

HTML Form

<div id="loadingResponse"></div>
{!!Form::open(array('url'=>'test/submit', 'id'=>'submitForm','method'=>'POST'))!!}
    {{Form::token()}}
    <input type="text" name="data"/>
    <button type="submit" class="btn btn-small btn-info">Send Data</button>
{{Form::close()}}

JS Ajax

$("#submitForm").submit(function(event) {
    event.preventDefault();
    $.ajax({
        url         : 'test/submit',
        data        : new FormData($("#submitForm")[0]),
        dataType    : 'JSON',
        type        : 'POST',
        beforeSend: function(){
            $("#loadingResponse").html("<img src='{{asset('img/loading.gif')}}' />");
        },
        success: function(response){
            console.log(response);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log('Error '+xhr.status+' | '+thrownError);
        },
    });
});

PHP Route

...
Route::post("test/submit","TestController@submit");
...

PHP Controller

class TestController extends Controller
{
    ...
    public function submit(Request $request)
    {
        response()->json(['msj' => $request->input('data')]);
    }
    ...
}

Upvotes: 0

Mauro Casas
Mauro Casas

Reputation: 2445

You were almost right, but when using $data in your function declaration you're actually requiring a Query String variable, rather than a form request.

You have to add your Form Request in your Controller method, like so:

public function getOrgById(Request $request){
    // do something here...
    return response()->json(array('foo' => 'bar'));
}

Upvotes: 0

saada
saada

Reputation: 2761

I think the below example is what you're looking for

Route

Route::post('/getOrgById', 'HomeController@getOrgById');

Controller

public function getOrgById(Request $request) {
    $id = $request->input('id');
}

JS

var myJsonData = {id: 1}
$.post('/getOrgById', myJsonData, function(response) {
    //handle response
})

Upvotes: 11

Martin Bean
Martin Bean

Reputation: 39389

You should really look into resourceful controller actions. If you are wanting to fetch an organisation by its ID then you have an organisaiton entity, so create a corresponding organisation controller. This controller can then have a method to show an organisation by on its primary key value:

class OrganisationController
{
    public function show($id)
    {
        return Organisation::findOrFail($id);
    }
}

The route for this would look like:

Route::get('/organisations/{id}', 'OrganisationController@show');

You can then request this route via AJAX like so:

$.ajax({
    method: 'GET',
    url: '/organisations/' + id
});

Upvotes: 3

jeanj
jeanj

Reputation: 2166

You can define paramers in your route:

Route::get('/getOrgById/{id}', 'HomeController@getOrgById');

And call it through:

$.ajax({
    url : "/getOrgById" + id
})

Upvotes: 0

afarazit
afarazit

Reputation: 4984

You can use Input to get your variable

public function getOrgById() {
     $data = \Input::get('data')
}

Upvotes: 0

Related Questions