使用lajvel中的ajax将数据发送到控制器

时间:2016-09-16 20:33:05

标签: ajax laravel

我正在尝试将简单的POST请求数据发送到控制器,但是使用ajax。没什么好看的,我只是想在没有页面重定向/刷新的情况下将数据发送到我的控制器。

编辑:将所有代码更新为目前的代码

标题

<meta name="csrf-token" content="{{ csrf_token() }}" />
<script>var host="{{url()}}"</script>

路线

post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');

标记

<div class="accordion messageAccordion getRequestReadMessage" data-value="{{$message->id}}">

脚本

$('.getRequestReadMessage').click(function() {
    $readValue = $(this).attr('data-value');
    $token     = $('meta[name=csrf-token]').attr("content");
        $.ajax({
        type: "POST",
        url: host + '/messages/unread',
        data: {readValue: $readValue, _token:$token},
    });
});

控制器

public function getReadRequest(Request $request)
{
    dd(Input::get("readValue"));
}

3 个答案:

答案 0 :(得分:4)

Ajax部分本身似乎很好。 确保在代码中的某处定义了host。例如:

<head><script>var host="{{url()}}"</script>

但是,如果你在click上听<a href,那么最好防止事件冒泡。像这样:

$('.getRequestReadMessage').click(function(e) {
   e.preventDefault();

对于Laravel Controller的方法,有很多种方法。 例如:

dd(Input::get("readValue"));
dd(Request::get("readValue"));
dd($request->input("readValue");

要么应该做到这一点

路线很可能也是关闭的,路径需要&#34;未读&#34;工作。

post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');

答案 1 :(得分:2)

由于你正在使用POST方法,你必须发送一个_token,你可能会收到一个令牌不匹配错误。

在标题上,输入:

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

在JS上

$('.getRequestReadMessage').click(function() {
    $readValue = $(this).attr('data-value');
    $token     = $('meta[name=csrf-token]').attr("content");
        $.ajax({
        type: "POST",
        url: host + 'messages/unread',
        data: {readValue: $readValue, _token:$token},
    });
});

但是你的路线似乎有些偏差。 将其更新为: post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');

==== EDIT =====

另外,我看到你在表单字段周围有这个div,因为你使用的是ajax,它不是必需的。

<div class="accordion messageAccordion getRequestReadMessage" data-value="{{$message->id}}">

我所做的是删除表单字段和隐藏的输入,我也删除了type = submit属性,因为它不是表单中的按钮。我算法将div中的value属性更改为数据值。将您的JS更改为:

$readValue = $(this).attr('data-value');

编辑2

$('.getRequestReadMessage').click(function() {
    $readValue = $(this).attr('data-value');
    $token     = $('meta[name=csrf-token]').attr("content");
    $.ajax({
        type: "POST",
        url: host + '/messages/unread',
        data: {readValue: $readValue, _token:$token},
    }).success(function (res){
        alert('it work! :D');
    });
});

答案 2 :(得分:0)

尝试调整您的路线:

Route::post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');