e.preventDefault无法在laravel 5.7上运行

时间:2019-01-06 14:56:16

标签: jquery arrays ajax laravel

我正在做聊天应用程序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

我在做什么错,我该如何解决?

2 个答案:

答案 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)

我终于找到了解决方案!它不是来自ajax,而是来自表单,实际上在我的表单中,我有以下内容:

<form action="/channels/{{$channel->id}}" method="POST">

我替换为

<form>

现在它可以完美运行了!谢谢大家 !爱你!