AJAX发布不向laravel控制器发送数据

问题描述 投票:4回答:5

也许这是一个非常常见的主题,但我找不到任何解决方案!,我正在开发的应用程序是在Laravel 5.0下,我需要从jquery ajax发送一些数据到laravel控制器,我已经按照this教程来使用ajax发布数据,我已经按照步骤进行了全局配置,因此我有一个带有csrf令牌的元数据,当我使用ajax将发送请求发送到url时,它只是发送令牌!但我发送的数据都没有!

这是我的ajax函数(我使用虚拟数据来测试它):

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

但是当我dd(\ Request :: all());在post func我只得到令牌,如果我检查表头数据我只得到这个:

data sent through the post

这是标题的完整图像:headers

这是带有csrf的元标记:

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

这是全局ajax设置:

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

大新闻

不知道为什么,也不知道怎么样,我想这只是一个缓存问题,但是上面的配置它会发送数据,但只有当我有一个<input type='submit' >并在jquery中设置click事件时才会发生,因为如果我设置了它提交事件,它在浏览器路径中使用查询字符串重新加载页面。

post data

现在问题是没有达到控制器的功能......当我点击按钮没有任何反应时,数据被发送但它没有到达laravel控制器。

jquery ajax post laravel-5
5个回答
3
投票

我希望这能帮到您。

设置元标记如下

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

设定路线

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

设置控制器功能

在顶部use Input;

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

请求如下

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

1
投票

HTML Form

在表单的某处添加CSRF令牌

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

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

在您的JS / jQuery脚本中添加以下内容

$.ajax({
  type: "POST",
  url: 'path/to/ajax-form-process',
  data: {
    data1: 'data1',
    data2: 'data2',
    data3: 'data3'
  },
  success: function(html){
    console.log(html);
  }
});

0
投票

你可以将_token作为数据集的一部分传递吗?

    $.ajax( {
        url        : '/reservacion/paso-uno/enviar',
        method     : 'post',
        data       : { "_token" : $('meta[name=_token]').attr('content'), name: "John", location: "Boston" }
    } );

0
投票

请尝试在路线中将您的方法更改为GET。然后使用Input :: all()获取内容;


0
投票
  1. 我不明白你在Ajax中的'url'参数。网址应该是这样的:“http://serveradrress/yourroute
  2. 最重要的是你的成功,错误和完整的功能在哪里?
  3. 您是在向api提交请求还是内部请求?
  4. 确保使用post方法:Route::post('//your postroute','//controller@//method');
  5. 在您的控制器中,您应该有课程和: public function(Request $request){ return response()->json(dd($request->all())); }