Ошибка HTTP-запроса с функцией onchange JS - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь добавить функцию состояния в систему заявок, встроенную в Laravel, которая будет поддерживать, если заявка открыта, закрыта, удерживается и т. Д.

У меня создана таблица состояний, и яможет ссылаться на эту таблицу в моем представлении.

Представление имеет раскрывающееся меню со всеми возможными состояниями, и я хотел бы обновить состояние заявки, когда в раскрывающемся меню выбрано новое состояние.

В настоящее время у меня запущена функция onchange JavaScript, но у меня проблема с отправкой запроса POST из функции JavaScript. При перенаправлении на маршрут POST я получаю сообщение об ошибке: MethodNotAllowedHttpException .

Маршрут публикации работает правильно, если я назначаю каждому состоянию свою собственную кнопку формы.

В последний разЯ получил эту ошибку, потому что я забыл передать токен CSRF в форму. Однако я понятия не имею, как это сделать с помощью функции JavaScript.

Я уверен, что есть способ выполнить то, что я пытаюсь сделать, но я не уверен, как это сделать.

Спасибо за любую помощь!


Это мой вид

<form name="stateForm" action="{{ url($claim->path() . '/state') }}">
    <select id="stateList" onchange="stateChange(this.form)">
            @foreach($states as $state)
                <option id="{{ url($claim->path() . '/state/' . $state->id) }}" value="{{ $state->id }}">{{ $state->name }}</option>
            @endforeach
    </select>
</form>

JavaScript вызван при изменении

function stateChange(stateForm, URL)
{
    var selIndex = stateForm.stateList.selectedIndex;
    var URL = stateForm.stateList.options[selIndex].id;
    window.location.href = URL;
}

Маршрут Ларавела

Route::post('/claims/{claim}/state/{stateID}', 'ClaimController@updateState');

Рабочий код с использованием форм и кнопок

<div class="btn-group">
@foreach( $states as $state)
    <form method="post" action="{{ url($claim->path() . '/state/'. $state->id) }}">
        {{ csrf_field() }}
        <button>
            {{ $state->name }}
        </button>
    </form>
@endforeach
</div>

1 Ответ

0 голосов
/ 04 октября 2019
window.location.href = URL;

- это запрос на получение, который в основном перенаправляет

. Вместо этого необходимо изменить маршрут на запрос GET

Route::get('/claims/{claim}/state/{stateID}', 'ClaimController@updateState');
...