首页 文章

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

提问于
浏览
4

也许这是一个非常常见的话题,但是我可以开发Laravel 5.0,我需要将一些数据从jquery ajax 发送到laravel controller ,我已经按照this教程使用ajax发布数据,我已经按照了步骤并进行全局配置,以便我有一个带有 csrf 标记的元数据,当我使用ajax将发送请求发送到网址时,它只是发送令牌!但我发送的数据没什么!

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

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

但是当我在post func中我只获得令牌时,如果我检查表头数据,我只得到这个:

data sent through the post

这是 Headers 的完整图像:
headers

这是带有csrf的元标记:

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

这是全局ajax设置:

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

BIG UPDATE

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

post data

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

5 回答

  • 0

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

  • 2

    我希望这能帮到您 .

    设置元标记如下

    <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);
        }
    })
    
  • 0

    HTML表单

    在表单的某处添加 CSRF Token 就像这样

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

    路线

    添加帖子路线

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

    表单处理方法

    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
    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 functionin 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('//yourpostroute','//controller@//method');
    5) In your controller you should have class and  : public function(Request $request){
                   return response()->json(dd($request->all()));
                 }
    

相关问题