我正在做聊天应用程序Laravel 5.7,并且在使用jQuery AJAX函数时遇到了挑战。
我正在使用PHP 7.1.9版和jQuery 3.x版。
这是我的带有AJAX请求的表格:
<form action="/channels/{{$channel->id}}" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
<input type="hidden" name="user_id" value="{{Auth::user()->id}}" />
<input type="hidden" name="channel_id" value="{{$channel->id}}" />
<input type="hidden" name="user" value="{{Auth::user()->name}}" />
<input type="text" name="msg" class="form-control msg" />
<input type="submit" value="Envoyer" class="btn send-msg" />
</form>
<script type="text/javascript">
$(document).ready(function() {
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content")
}
});
$(".send-msg").click(function(e) {
e.preventDefault();
var user_id = $("input[name='user_id']").val();
var channel_id = $("input[name='channel_id']").val();
var user = $("input[name='user']").val();
var msg = $("input[name='msg']").val();
$.ajax({
type: "POST",
url: "/channels/{{$channel->id}}",
data: {
msg: msg,
user: user,
channel_id: channel_id,
user_id: user_id
},
success: function(data) {
alert(data.success);
}
});
});
});
</script>
还有我的PHP代码:
public function sendmessage(Request $request){
$message = new Messages();
$message->channel_id = $request->channel_id;
$message->user_id = $request->user_id;
$message->username = $request->user;
$message->message = $request->msg;
$message->save();
return response()->json(['success'=>'Got Simple Ajax Request.']);
}
通常,它应该发布带有数据的警报,但实际上,它使用/channels/{id}
将我重定向到json : success: Got Simple Ajax Request
我在做什么错,我该如何解决?
答案 0 :(得分:1)
由于您仅将event
处理程序附加到了submit
按钮上,因此当其他事件(例如,在更改设置后按enter
键)时,表单仍将遵循表单提交的默认行为。输入值被触发。
要解决此问题,最好在表单本身上监听submit
事件,而不是将事件侦听器附加到按钮上。
这将同时涉及
submit
和按钮click
形式的事件。
$("form").on('submit', function(e){
e.preventDefault();
// if e.preventDefault() doesn't work, try `return false`
// your remaining code here
});
答案 1 :(得分:0)
<form action="/channels/{{$channel->id}}" method="POST">
我替换为
<form>
现在它可以完美运行了!谢谢大家 !爱你!