Метод не разрешен Http Исключение Ajax-запроса - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь обновить некоторые данные через ajax в laravel 5, но я сталкиваюсь с исключением MethodNotAllowed Http.

Итак, я создал маршрут ресурса в web.php, HTML-форму для получения некоторых данных, предварительно заполненных в текстовых полях, и некоторый код ajax.

Код для Web.php, с префиксом через администратора.

Route::resource('settings', 'OrganisationSettingsController', ['only' => ['edit', 'update', 'index', 'change-language']]);

Код формы HTML

{!! Form::open(['id'=>'editSettings','class'=>'ajax-form','method'=>'PUT']) !!} //Input Elements Goes Here... {!! Form::close() !!} Ajax Call code

$('#save-form').click(function () {
    $.easyAjax({
        url: '{{ route('admin.settings.update', ['1']) }}',
        container: '#editSettings',
        type: "POST",
        redirect: true,
        file: (document.getElementById("logo").files.length != 0 || document.getElementById("login_background").files.length != 0) ? true : false
    })
});

Когда пользователь нажимает кнопку обновления, данные должны быть обновлены, но я получил метод http, не допускается исключение в консоли браузера.

Ответы [ 4 ]

1 голос
/ 20 июня 2019

Вы публикуете данные.Когда вы публикуете данные и используете ресурс в своем маршрутизаторе, laravel вызывает функцию хранилища, а ваш маршрут не позволяет ему (['only' => ['edit', 'update', 'index', 'change-language']).

для тестирования добавить функцию хранилища к вашему маршруту и ​​dd($request); вы можете увидеть ваш request;

0 голосов
/ 20 июня 2019

Спасибо @adam за ваш ответ, это была именно проблема.Наконец, я написал следующий код, чтобы получить ожидаемый результат

$('#save-form').click(function () {
        $.easyAjax({
            url: '{{ route('admin.settings.update', ['1']) }}',
            container: '#editSettings',
            type: "POST",
            data: {
                'company_name': $('#company_name').val(),
                'company_email': $('#company_email').val(),
                'company_phone': $('#company_phone').val(),
                'website': $('#website').val(),
                'address': $('#address').val(),
                'currency_id': $('#currency_id').val(),
                'timezone': $('#timezone').val(),
                'locale': $('#locale').val(),
                'latitude': $('#latitude').val(),
                'longitude': $('#longitude').val(),
                '_method' : 'PUT',
                '_token' : '{{csrf_token()}}'
            },
            redirect: true,
            file: (document.getElementById("logo").files.length != 0 || document.getElementById("login_background").files.length != 0) ? true : false
        })
    });
0 голосов
/ 20 июня 2019

Вам нужно будет подделать ваш метод от вызова ajax, предполагая, что easyAjax разрешает атрибут данных, который он должен включать:

data: {
    '_method' : 'PUT'
},

Кроме того, вы захотите включить свой токен csrf:

data: {
    '_method' : 'PUT',
    '_token' : '{{csrf_token()}}'
},

Примечание: '{{csrf_token()}}' будет работать до тех пор, пока скрипт является частью вида блейда.Если нет, то используйте заголовок:

headers: {
    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}

Если вам нужно использовать заголовки для включения вашего токена csrf, обязательно включите метатег в заголовочную часть вашего документа:

<meta name="csrf-token" content="{{ csrf_token() }}">

Полное решение:

$('#save-form').click(function () {
    $.easyAjax({
        url: '{{ route('admin.settings.update', ['1']) }}',
        container: '#editSettings',
        type: "POST",
        data: {
          '_method' : 'PUT',
          '_token' : '{{csrf_token()}}'
        },
        redirect: true,
        file: (document.getElementById("logo").files.length != 0 || 
        document.getElementById("login_background").files.length != 0) ? true : false
    })
});

Подробнее о методе подмены .

0 голосов
/ 20 июня 2019

Не используйте method => PUT в форме.Вместо этого измените на

{!! Form::open(['id'=>'editSettings','class'=>'ajax-form','method'=>'POST']) !!}
@method('PUT')
@csrf

//input elements here

{!! Form::close() !!}

Вам нужно изменить 'method' => 'POST' и добавить @ method ('PUT') и @ csrf как добавлено выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...