【发布时间】:2020-11-12 00:53:38
【问题描述】:
我正在尝试在 laravel 中创建一个个人消息系统,该系统的一部分是能够在不刷新整个页面的情况下以表单发送消息。
我一直在关注一些 youtube 教程,这是我目前掌握的 Ajax 脚本。
<form id="form{{$dm->id}}">
{{ csrf_field() }}
<input id="message" placeholder="Send a message" style="border-radius: 0px;" type="username" class="form-control" name="message">
<script>
$('form{{$dm->id}}').ready(function (){
$('form{{$dm->id}}').on('submit', function( event ) {
event.preventDefault();
$.ajax({
type: 'post',
url: '{{ route("sendMessage", $dm->id) }}',
data: $('form{{$dm->id}}').serialize(),
success: function(response){
alert('suces')
},
error: function(response){
alert('failure')
}
});
});
});
</script>
</form>
它不是向控制器发送一个 POST 请求,而是发送一个 GET 请求并只是重定向。 这是我第一次搞乱 Ajax/Javascript,所以我不知道为什么这不起作用。
控制器脚本:
public function sendM(Request $request, $id)
{
$validatedData = $request->validate([
'message' => 'required|string|max:255|min:4',
]);
$dm = Dm::find($id);
$mess = new Message;
$mess->Authid = Auth::user()->id;
$mess->Userid = $dm->Userid;
$mess->Dmid = $dm->id;
$mess->message = $request->input('message');
$dm->messages()->save($mess);
$dm->touch();
}
路线入口:
Route::post('/sendmessage/id{id}', 'SettingsController@sendM')->name('sendMessage')->middleware('verified');
非常感谢任何帮助! (注意:对不起,如果它真的很明显)
【问题讨论】:
-
添加:方法:'POST',
-
javascript 的完整上下文是什么?你确定这是正在执行的调用吗?你可以在 $.ajax 之前 console.log('start') 和之后 console.log('finish') ,并且只在浏览器控制台中看到'start'吗?如果您查看开发人员工具网络选项卡并选中“保留历史记录”会发生什么 - 网络活动是否符合您的预期?是否有任何意外重定向?
-
当我在脚本中添加
console.log('start')和console.log('finish')时,它似乎没有记录任何内容。在网络选项卡中,它只是重定向到带有信息的 GET 地址,而不是实际的 POST 请求。