AJAX post not sending data to laravel controller

2019-05-08 19:03发布

Maybe this is a very common topic, but i can't find any solution!, the app i'm developing is under Laravel 5.0, i need to send some data from jquery ajax to a laravel controller, i've followed this tutorial to post data using ajax, i've followed the steps and made the global configuration, so that i have a meta with the csrf token, when i send the post request to a url using ajax, it just sends the token!! but nothing of the data i give it to send!

Here's my ajax func (i'm using dummy data to test it):

        $.ajax( {
            url        : '/reservacion/paso-uno/enviar',
            method     : 'post',
            data       : { name: "John", location: "Boston" }
        } );

but when i dd(\Request::all()); in the post func i only get the token, also if i check the headers form data i only get this:

data sent through the post

Here's a complete image of the headers: headers

Here's the meta tag with the csrf:

<meta name="_token" content="{{{ csrf_token() }}}"/>

And here's the global ajax setup:

$.ajaxSetup({
                headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
            });

BIG UPDATE

Don't know why, neither how, i guess it was just a cache problem, but having the above configuration it sends data, but that happens only when i have a <input type='submit' > and in jquery setup the click event, because if i setup it for the submit event it reloads the page with a query string in the browser path.

post data

Now the problem is that the function of the controller is not reached... when i click on the button nothing happens, data is send but it dont reaches laravel controller.

5条回答
等我变得足够好
2楼-- · 2019-05-08 19:36

HTML Form

Somewhere in the form add the CSRF Token like this

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

Route

Add a post route

Route::post('/path/to/ajax-form-process', 'FormController@processor');

Form process method

class FormController extends Controller{

  public function processor(Request $request){
    $input = $request->all();

    //Do other processes

    return '200'; //Use any string that is appropriate
  }

}

jQuery Ajax

In your JS/jQuery script add the following

$.ajax({
  type: "POST",
  url: 'path/to/ajax-form-process',
  data: {
    data1: 'data1',
    data2: 'data2',
    data3: 'data3'
  },
  success: function(html){
    console.log(html);
  }
});
查看更多
3楼-- · 2019-05-08 19:36

Please try changing your method to GET, in routes as well. Then grab the content with a Input::all();

查看更多
Viruses.
4楼-- · 2019-05-08 19:44

i hope this will help you.

set meta-tag like follows

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

set route

Route::get('/your/url/goes/here',
        [
        'uses' => 'TestController@testFunction'
        ]);

set controller function

on top use Input;

public function iddtest()
{
print_r(Input::all());
}

request like follows

$.ajax({
    data: {data1:'data1',data2:'data2'},
    url: '/your/url/goes/here',
    type: 'POST',
    beforeSend: function (request) {
        return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
    },
    success: function(response){
        console.log(response);
    }
})
查看更多
我想做一个坏孩纸
5楼-- · 2019-05-08 19:52
  1. i do not understand your 'url' parameter in Ajax. Url should be like these: "http://serveradrress/yourroute"
  2. On top of that where are your success, error and complete function in ajax ??
  3. Are you submitting your request to your api or it is just internal request ??
  4. Make sure you use post method : Route::post('//your postroute','//controller@//method');
  5. In your controller you should have class and :

    public function(Request $request){
        return response()->json(dd($request->all()));
    }
    
查看更多
戒情不戒烟
6楼-- · 2019-05-08 19:54

Can you pass the _token as part of your data set?

    $.ajax( {
        url        : '/reservacion/paso-uno/enviar',
        method     : 'post',
        data       : { "_token" : $('meta[name=_token]').attr('content'), name: "John", location: "Boston" }
    } );
查看更多
登录 后发表回答