Ajax请求在Laravel中产生404

时间:2014-07-24 16:30:30

标签: php jquery ajax laravel laravel-4

我试图在用户点击按钮后更新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>                   

1 个答案:

答案 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。