401 Unauthorized DELETE request to RESTful API in laravel via Ajax

前端 未结 2 1123
悲&欢浪女
悲&欢浪女 2021-01-03 06:23

I\'ve created a restful API using laravel controllers. I have a PhotosController which has a destroy($id) method for resource dele

2条回答
  •  抹茶落季
    2021-01-03 07:07

    I do this sort of thing all the time in my Laravel Apps with no issues. This code allows the user to delete a resource through AJAX while presenting a bootstrap confirmation dialog first. The code is laid out in the order the events would occur.

    VIEW WITH RESOURCE TO DELETE

    
        
    
    

    JQUERY TO PROMPT CONFIRMATION MODAL

    $('.delete-plan').on('click', function(e) {
        e.preventDefault();
    
        var data = {
            'route':        $(this).attr('href'),
            'redirect':     $(this).data('redirect'),
            'modal_title':  'Delete Plan',
            'content_view': 'Are you sure you want to delete plan: ' + $(this).data('plan-name') + '?',
            'lang':         $(this).data('lang')
        };
    
        loadDestroyModal(data);
    });
    
    function loadDestroyModal(data) {
        $.get('/ajax/destroy-modal', { data: data }, function(modal) {
            $('body').append(modal);
            $('#destroy-modal').modal('show');
        });
    }
    

    AJAX CONTROLLER

    // routed by /ajax/destroy-modal
    public function destroyModal() {
        $data = Input::get('data');
    
        $params = [
            'route'    => $data['route'],
            'redirect' => $data['redirect'],
            'title'    => $data['modal_title'],
            'content'  => $data['content_view'],
            'lang'     => $data['lang']
        ];
    
        return View::make('_helpers.modal-destroy', $params);
    }
    

    DESTROY CONFIRMATION MODAL (_helpers.modal-destroy)

    
    

    JQUERY TO PROCESS DESTROY METHOD AND REDIRECT FLASH MESSAGE

    $('body').on('click', '#destroy-modal #modal-confirm', function(e) {
        var redirect = $(this).data('redirect');
        var lang     = $(this).data('lang');
    
        $(this).html(' Please Wait');
    
        $.ajax({
            'url':     $(this).data('route'),
            'type':    'DELETE',
            'success': function(response) {
                if (response) {
                    redirectWithFlashMessage(redirect, 'destroy', 'success', lang);
                } else {
                    redirectWithFlashMessage(redirect, 'destroy', 'errors', lang);
                }
            }
        });
    });
    

    PLANS CONTROLLER

    public function destroy($id)
    {
        try
        {
            Stripe::plans()->destroy(['id' => $id]);
    
            return Response::json(TRUE);
        }
        catch (Exception $e)
        {
            return Response::json(FALSE);
        }
    }
    

    JQUERY FOR REDIRECTION

    function redirectWithFlashMessage(redirect, type, status, lang) {
        var params = {
            type:   type,
            status: status,
            lang:   lang
        };
    
        $.get('/ajax/flash', params, function(response) {
            window.location.href = redirect;
        });
    }
    

    AJAX CONTROLLER (Redirect with Flash)

    public function flashData() {
        $message_type = 'success' == Input::get('status') ? 'success' : 'failure';
    
        $message = Lang::get(Input::get('lang'))[Input::get('type') . '_' . $message_type];
    
        Session::flash($message_type, $message);
    
        return ['status' => $message_type, 'message' => $message];
    }
    

    It's a lot of code but once setup it's extremely easy to replicate.

提交回复
热议问题