Laravel 4 通过ajax链接到控制器操作的Laravel
我试图在Laravel中通过AJAX调用控制器方法 我的HTML链接是: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
<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还有其他方法,我将使用它