我试图通过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
函数的警报,但数据库值没有更新。
答案 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
。