#jquery #ajax #laravel #submit
#jquery #ajax #laravel #Отправить
Вопрос:
Я исследовал, как отправлять AJAX-запросы с помощью Laravel, и ничего не добился. Похоже, что AJAX работает так, как будто, когда я удаляю свои функции отправки / щелчка и просто говорю «alert (‘test’), он появляется при нажатии кнопки. Однако, когда я нажимаю кнопку «Подтвердить», не вызывается мой маршрут, который запрашивает ввод из моей текстовой области, поэтому обновление не выполняется при проверке моей базы данных MYSQL.
Я позаботился о том, чтобы включить заголовки CSRF в мою форму и AJAX, а также установить для моего типа кнопки значение «button», чтобы предотвратить отправку фактической формы. Может кто-нибудь, пожалуйста, указать мне правильное направление, является ли причиной моей проблемы мой AJAX, контроллер или код веб-маршрута. Я пытался найти исправление в течение последних 2 дней, и у меня ничего не получается. Также существует отношение «один ко многим» между тикетом и ответом, поэтому я получаю доступ к данному ответу tickets и соответствующим образом его обновляю. Я также уже пробовал не отправлять их в формате JSON и все еще не работает.
Это моя разметка формы:
<div class="modal-body">
<form id="edit-reply">
@csrf
@method('PATCH')
<div class="form-group">
<textarea class="form-control testing" id="edit-box" rows="12"name="edit-message" placeholder="{{$r->message}}" required></textarea>
</div>
<button type="button" class="btn btn-light btn-outline-dark" id="edit-button" data-dismiss="modal"style="font-weight: bold;">Confirm</button>
</form>
Разметка для AJAX
<script type="text/javascript">
jQuery(document).ready(function () {
$('#edit-button').on('submit', function (e) {
e.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: "{{ route('ticket.create', $slug->slug) }}",
type: 'PATCH',
data: {
message: jQuery('#edit-box').val()
},
success: function (result) {
jQuery('.alert').show();
jQuery('.alert').html(result.success);
}
});
});
});
</script>
TicketController
public function editReply(Ticket $ticket)
{
$t = $ticket->reply()->update(request(['edit_message']));
return response()->json($t);
}
Код для маршрута
Route::patch('ticket/{ticket}', 'TicketController@editReply')->name('ticket.edit-reply');
Комментарии:
1. Данные вашей формы содержат
message
в качестве своего ключа. Но вы пытаетесь восстановить его какedit_message
в вашем контроллере.2. @Chay22 Привет, хорошо, итак, если бы я получил доступ к этому ключу «message» в моем контроллере, возможно ли это? или как еще к нему можно получить доступ? и оказывает ли мое возвращение в JSON какое-либо влияние?
3. Измените свой тип ajax на get или post, такой же, как в laravel route могу ли я взглянуть на ваш контроллер, как вы получаете данные и возвращаете их
4. Хорошо, и вы хотите, чтобы я отправил вам весь мой контроллер или route: list? Итак, мой TicketController выше — это то, как я пытаюсь вернуть его, однако я не думаю, что мне обязательно нужно возвращать его как JSON?
5. Однажды у меня была проблема с ИСПРАВЛЕНИЕМ. Вам придется выполнить отладку. Вы запрашиваете с другого сервера, отличного от сервера Laravel? Это может быть проблемой. В любом случае, если вы просто вернетесь
return response()->json($ticket);
, просто чтобы посмотреть, вернуло ли это что-нибудь? Если нет, похоже, что ваш запрос на исправление вообще не отправляется. Откройте inspect element и перейдите на вкладку консоли, вы должны увидеть причину, по которой любой запрос может завершиться неудачей. Если у вас та же проблема, что и у меня, я помогу вам
Ответ №1:
Попробуйте передать заголовок таким образом, возможно, это его работа:
$.ajaxSetup({
headers:{
"Authorization": "Bearer " $('meta[name="csrf-token"]').attr('content')
}
});
Комментарии:
1. Оказывается, проблема заключалась в том, что я не использовал ajax mesasge key на своем контроллере. Однако моя единственная проблема сейчас заключается в том, чтобы остановить отправку от обновления каждого сообщения и только определенного сообщения.