如何在Laravel 5.1中将变量值从JavaScript发送到Controller

时间:2015-08-31 08:14:48

标签: javascript jquery ajax controller laravel-5.1

我有一个带有字段的表单

<input type="hidden" name="user_id" id="user-id" value="">

我在按钮点击(不是表单提交)时通过javascript设置字段值。我想将此值从javascript或从php传递给Controller。我搜索了它,我发现ajax将用于此。这是我到目前为止所尝试的

$.ajax({
        url: 'localhost:8000/test',
        type: 'POST',
        data: { id: 1 },
        success: function()
        {
            alert("Settings has been updated successfully.");
        }
    });

我是Javascript的初学者,我不太了解ajax。请引导我朝正确的方向前进。(上面的ajax不能正常工作)
更新
单击按钮

时出现此错误
POST http://localhost:8000/test 500 (Internal Server Error)x.ajaxTransport.send @ jquery-1.10.2.min.js:6x.extend.ajax @ jquery-1.10.2.min.js:6openMessageBox @ js.js:28

这就是我在点击按钮时调用ajax请求openMessageBox的方式

function openMessageBox(){
        $.ajax({ //line 28
        url: 'test',
        type: 'POST',
        data: { id: $('#user-id').val() },
        success: function()
        {
            alert("Settings has been updated successfully.");
        }
    });
}

1 个答案:

答案 0 :(得分:1)

要获得适用于Laravel应用程序的ajax调用,您需要做两件事:

在路线文件中设置路线

将以下行添加到路线文件中,默认情况下会在app/Http/routes.php

Route::post('/test', 'Controller@method');
//Please change `Controller` to be the actual name of the controller and `method` to be the method name in that controller.

有关详细信息,请参阅文档http://laravel.com/docs/5.1/routing

CSRF令牌 (假设您没有删除CSRF中间件或为此路由禁用它)

添加CSRF token的最简单方法是将其添加到ajax请求数据中,即

data: {_token: {{ csrf_token() }}, id: 1}

但我假设您将使用多个ajax请求,那么您最好做的是在主布局模板的<head>标记内添加元标记(s)

<meta name="csrf_token" value="{{ csrf_token() }}">

然后在你进入jQuery的地方添加某个地方:

<script>
$(function () {

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf_token"]').attr('value')
        }
    });
}); 
</script>

这样您就不必在您的ajax数据中包含令牌。

仅供参考,大多数现代浏览器都有一个检查器控制台,除了其他功能之外,它还允许您通过ajax请求(以及更多)查看您从服务器返回的响应。例如,在Chrome中,只需右键单击页面,单击“检查元素”,然后单击“网络”选项卡。您需要在发送请求之前将其打开。这将允许您查看Laravel是否抛出任何错误。

希望这有帮助!