AJAX post未向Laravel控制器发送数据

6
也许这是一个非常普通的话题,但我找不到任何解决方案! 我正在开发的应用程序位于Laravel 5.0下,我需要从jquery ajax发送一些数据到laravel控制器。 我遵循了this教程来使用ajax发布数据,并按照步骤进行了全局配置,以便我具有带有csrf令牌的元数据。 当我使用ajax将post请求发送到URL时,它只会发送令牌!! 但是没有我要发送的数据! 这是我的ajax函数(我正在使用虚拟数据进行测试):
        $.ajax( {
            url        : '/reservacion/paso-uno/enviar',
            method     : 'post',
            data       : { name: "John", location: "Boston" }
        } );

但是当我在post函数中使用dd(\Request::all());时,我只能得到令牌,而且如果我检查头部的表单数据,我只能得到这个:

data sent through the post

这里是标题的完整图片: headers 这里是带有csrf的meta标签:
<meta name="_token" content="{{{ csrf_token() }}}"/>

这是全局的ajax设置:

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

重大更新

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

post data

现在的问题是控制器的功能没有被调用...当我点击按钮时,什么都不会发生,数据被发送了,但它没有到达Laravel控制器。

尝试添加 dataType: 'html' - hizbul25
你是否正试图将原始JSON发布到控制器? - Phil
@Phil 是的,但我现在需要将数据传递到控制器中,一旦传递成功,我会看看如何操作它... - Jonathan Solorzano
@SetSailMedia 是的,也许吧,但这次不是关于Laravel的,它更多地涉及到ajax,我真的不知道为什么他妈的它没有发送数据! - Jonathan Solorzano
让我们在聊天中继续这个讨论 - Jonathan Solorzano
显示剩余3条评论
5个回答

3
我希望这能对您有所帮助。

设置meta标签如下

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

2

HTML表单

在表单中的某个位置添加CSRF令牌,如下所示:

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

路由

添加一个文章路由

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
  1. 我不理解你在Ajax中的'url'参数。Url应该像这样: "http://serveradrress/yourroute"
  2. 此外,在Ajax中,你的成功、错误和完成函数在哪里?
  3. 你是将请求提交给你的API还是只是内部请求?
  4. 确保你使用post方法:Route::post('//your postroute','//controller@//method');
  5. 在你的控制器中,你应该有类和:

    public function(Request $request){
        return response()->json(dd($request->all()));
    }
    

0
请尝试将您的方法更改为GET,在路由中也是如此。然后使用Input :: all()获取内容。

0

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

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

我按照你说的做了,但是什么也没发生……结果一样。 - Jonathan Solorzano
也要删除$.ajaxSetup()的条目吗? - Patrick Moore
是的,我已经移除了ajaxSetup。 - Jonathan Solorzano
你能再检查一下吗?它在这个fiddle上POST正常:http://jsfiddle.net/bLuvf7sw/ - Patrick Moore
不,它没有发布,现在我面临一个问题,当我点击按钮时,它会重新加载页面。 - Jonathan Solorzano
如果它正在提交页面(重新加载页面),那么您的某个JavaScript代码已经在浏览器中提交了表单。 - Patrick Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接