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

Laravel 4 通过ajax链接到控制器操作的Laravel,laravel-4,Laravel 4,我试图在Laravel中通过AJAX调用控制器方法 我的HTML链接是: <a href="javascript://ajax" onclick="Update('{{ $id }}');" title="Update"> 我的控制器方法: function postSave( $id=0 ) { DB::table('exams')->where('id', $id)->update(array('status' => 3)); DB::tab

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

我的HTML链接是:

<a href="javascript://ajax"  onclick="Update('{{ $id }}');" title="Update">
我的控制器方法:

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

我收到了
成功
功能的警报,但数据库值没有更新。

发生的情况是,您将id作为
数据
传递,但您假定(根据
postSave
声明)该id是路由的一部分。由于
postSave
的参数
$id
从未收到任何值,因此它将获得默认值(您将其设置为0),我猜您没有任何id=0的数据库行

换句话说,在ajax代码中,您有类似于
的数据:{id:id},
,并且由于该方法是POST,因此在控制器上您将可以访问
$\u POST['id']
,或者,如果您更喜欢Laravel方式
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
作为参数接收。因此,如果您喜欢这种方式,则需要更改以下内容:

路线:

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

$.ajax({
    type: "POST",
    url: '/ExamTimeTable/' +  id + '/save',
    success: function() {
        alert('success');
    },
    error:function(){
        alert('failure');
    }
}); 

您可以保持PHP代码的原样,因为Laravel将自动填充
postSave
方法的参数
$id

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

换句话说,在ajax代码中,您有类似于
的数据:{id:id},
,并且由于该方法是POST,因此在控制器上您将可以访问
$\u POST['id']
,或者,如果您更喜欢Laravel方式
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
作为参数接收。因此,如果您喜欢这种方式,则需要更改以下内容:

路线:

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

$.ajax({
    type: "POST",
    url: '/ExamTimeTable/' +  id + '/save',
    success: function() {
        alert('success');
    },
    error:function(){
        alert('failure');
    }
}); 

您可以保持PHP代码不变,因为Laravel将自动填充
postSave
方法的参数
$id

您可以为
routes.PHP添加代码吗?Route::controller('ExamTimeTable','ExamTimeTableController');如何将
$id
从控制器传递到在
更新({{$id}})
中使用它的视图?顺便问一下,为什么HTML(
Update
)和JS(
updateMetable
)中函数的名称不同?名称是相同的。只是一个打字错误。我没有将id传递给视图。我只需要更新控制器中的数据库。如果没有ajax还有其他方法,我会使用它。你能为你的
routes.php
添加代码吗。Route::controller('ExamTimeTable','ExamTimeTableController');如何将
$id
从控制器传递到在
更新({{$id}})
中使用它的视图?顺便问一下,为什么HTML(
Update
)和JS(
updateMetable
)中函数的名称不同?名称是相同的。只是一个打字错误。我没有将id传递给视图。我只需要更新控制器中的数据库。如果没有ajax还有其他方法,我将使用它