我一直在研究如何使用Laravel发送AJAX请求,却一无所获。当我删除我的onsubmit / click函数并说“ alert('test')”时,AJAX似乎起作用,但是在单击按钮时它会弹出。但是,当我单击“ Confirm”按钮时,我的路线并未被请求来自我的textarea的输入,因此,当我检查MYSQL数据库时不会进行更新。
我确保在表单和AJAX上都包含CSRF标头,并将按钮类型设置为“按钮”,以防止提交实际的表单。有人可以向我指出正确的方向,而不管是我的问题的原因是我的AJAX,控制器还是Web路由代码。在过去的两天里,我一直在努力寻找解决办法,但没有成功。票证和回复之间也存在一对多的关系,所以这就是为什么我要访问给定的票证回复并进行相应更新。我也已经尝试过不将其作为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');
答案 0 :(得分:0)
尝试像这样传递标头可能是它的工作
$.ajaxSetup({
headers:{
"Authorization": "Bearer " + $('meta[name="csrf-token"]').attr('content')
}
});