1

I am trying to update a SQL table after a user clicks on a button. I am using Laravel, and having trouble making the ajax call work, i.e. i get a 404 response. My current approach was to route the request to a Route that would pass it to the controller. Could anyone please help me understand my mistake(s)?

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 Answer 1

1

Your route defines this URL:

/controllers/AccountController

And your AJAX is submitting to this URL:

/controller/userManagementAjax

So you should be getting a 404 error on your ajax call.

The as syntax in your route simply denotes a named route. The first argument to the Route::post call should be the URI you're expecting, not the controller name (the controller name should be used in the uses key in the second array parameter).

I think this is what you're going for with your route:

Route::post('/controllers/userManagementAjax', array(
    'as'    =>  'user.delete',
    'uses'  =>  'AccountController@deleteAccount'
));

The first string parameter must match the URL you are attempting to post to with AJAX.

To take advantage of the named route, you can now redirect to user.delete or generate a link to the route user.delete like this:

// 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>

The benefit of using named routes is basically that you can change the URL's in your routes.php file at will as long as everything else that relies on them is referencing the name rather than the URL.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.