我试图在用户点击按钮后更新SQL表。我正在使用Laravel,并且无法使ajax调用工作,即我得到了404响应。我目前的方法是将请求路由到将其传递给控制器的Route。有人可以帮我理解我的错误吗?
ROUTE
Route::post('/controllers/AccountController', array(
'as' => 'userManagementAjax',
'uses' => 'AccountController@deleteAccount'
));
CONTROLLER
public function deleteAccount(){
if($_POST['action'] == "delete") {
DB::table('users')
->where('email', $_POST['email'])
->update(array('suspended' => 1));
echo "ok";
}
}
HTML& JAVASCRIPT
<script>
function rmuser(a) {
alert('Removing user: '+a);
$.ajax({
url: '/controller/userManagementAjax',
type: 'POST',
data: {'action': 'delete', 'email': a},
success: function(data, status) {
if(data == "ok") {
$('#tr'+a).remove();
}
},
error: function(xhr, desc, err) {
console.log(xhr);
console.log("Details: " + desc + "\nError:" + err);
}
}); // end ajax call
};
</script>
<button class="btn" onclick="rmuser('some_email')">Delete</button>
答案 0 :(得分:1)
您的路线定义了此网址:
/控制器/的AccountController
您的AJAX正在提交此网址:
/控制器/ userManagementAjax
所以你应该在你的ajax电话上遇到404错误。
路线中的as
语法仅表示 named route 。 Route::post
调用的第一个参数应该是您期望的URI,而不是控制器名称(控制器名称应该在第二个数组参数的uses
键中使用)。
我认为这就是你的路线:
Route::post('/controllers/userManagementAjax', array(
'as' => 'user.delete',
'uses' => 'AccountController@deleteAccount'
));
第一个字符串参数必须与您尝试使用AJAX发布的URL匹配。
要利用指定的路线,您现在可以重定向到user.delete
或生成指向路线user.delete
的链接,如下所示:
// Redirect to named route from controller
return Redirect::route('user.delete');
// Display link in blade template to named route
<a href="{{ URL::route('user.delete') }}">Delete User</a>
使用命名路由的好处基本上是您可以随意更改routes.php文件中的URL,只要依赖它们的其他所有内容都引用名称而不是URL。