Laravel通过ajax链接到控制器操作

时间:2016-06-09 11:34:48

标签: laravel-4

我试图通过Laravel中的AJAX调用控制器方法

我的HTML链接是:

<a href="javascript://ajax"  onclick="Update('{{ $id }}');" title="Update">

我的javascript函数:

function UpdateTimeTable(id)
{
    if(confirm('Please confirm if you want to publish Time Table for this exam.'))
    {
        console.log(id);
        $.ajax({
            type: "POST",
            url: '/ExamTimeTable/save',
            data: {id: id},
            success: function() {
                 alert('success');
            },
            error:function(){
                 alert('failure');
            }
        });     
    }
    return false;
}

我的控制器方法:

function postSave( $id=0 )
{
    DB::table('exams')->where('id', $id)->update(array('status' => 3));
    DB::table('examstat')->where('exam_id', $id)->update(array('status' => 1));
    die;    
}

此外,我的路线定义如下:

Route::controller('ExamTimeTable', 'ExamTimeTableController'); 

我收到了success函数的警报,但数据库值没有更新。

1 个答案:

答案 0 :(得分:0)

发生的事情是你将id传递给data,但你假设(每postSave个声明)id是路由的一部分。由于$id的参数postSave从未接收任何值,因此它将获得默认值(您设置为0)并且我猜测您没有id = 0的任何数据库行。

换句话说,在你的ajax代码中,你有data: {id: id},,并且由于该方法是POST,因此在控制器上你可以访问$_POST['id'],或者,如果你更喜欢Laravel方式{ {1}}。

因此,一种选择是将控制器方法更新为:

Input::get('id)

另一个选项是将参数// Remove the parameter, as it isn't filled based on the route. function postSave() { // access the $id value as the data of the request $id = \Input::get('id', 0); DB::table('exams')->where('id', $id)->update(array('status' => 3)); DB::table('examstat')->where('exam_id', $id)->update(array('status' => 1)); } 作为路径的一部分,在这种情况下,您的方法接收id作为参数。因此,如果您更喜欢这种方式,则需要更改以下内容:

路线:

id

Ajax代码:

Route::post(
    '/ExamTimeTable/{id}/save',
    ['as' => 'route-name', 'uses' => 'ExamTimeTableController@postSave']
);

您可以保留PHP代码,因为Laravel会自动填充$.ajax({ type: "POST", url: '/ExamTimeTable/' + id + '/save', success: function() { alert('success'); }, error:function(){ alert('failure'); } }); 方法的参数$id