【问题标题】:Your session has expired. on ajax form post laravel您的会话已过期。在 ajax 表单上发布 laravel
【发布时间】:2019-01-06 10:06:38
【问题描述】:

我的视图中有以下 html 片段和 js 代码来处理表单请求。

$('#quick-enquiry').on('submit', function(e) {
  e.preventDefault();
  $(".submit").prop("disabled", true);
  data = $(this).serialize();
  action = $(this).attr('action');
  $.ajax({
    type: 'POST',
    url: action,
    data: data,
    headers: {
      "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content")
    },
    success: function(data) {
      if ($.isEmptyObject(data.error)) {
        $("#quick-enquiry").trigger("reset");
        $('.print-error-msg').find('ul').empty();
        $('.print-error-msg').css('display', 'block');
        $("#response-msg").toggleClass('uk-alert-danger uk-alert-success');
        $('.print-error-msg').find('ul').append("<li>" + data.success + "</li>");
        setTimeout(function() {
          $('.print-error-msg').fadeOut();
          $(".submit").prop("disabled", false);
          UIkit.modal("#modal-quick-enquiry").hide();
        }, 3000);
      } else {
        printMessageErrors(data.error);
      }
    }
  });
});

function printMessageErrors(msg) {
  $('.print-error-msg').find('ul').empty();
  $('.print-error-msg').css('display', 'block');
  $.each(msg, function(key, value) {
    $('.print-error-msg').find('ul').append("<li>" + value + "</li>");
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.26/js/uikit.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-rc.26/css/uikit.min.css" rel="stylesheet" />
<form action="{{ route('frontend-postEnquiry') }}" method="POST" id="quick-enquiry">
  <input type="hidden" id="tour-id" value="1">
  <div class="uk-margin">
    <label class="uk-form-label" for="form-stacked-text">Full Name</label>
    <div class="uk-form-controls">
      <input class="uk-input uk-form-width-large" type="text" placeholder="Full Name" id="fullName" name="fullName">
    </div>
  </div>

  <div class="uk-margin">
    <label class="uk-form-label" for="form-stacked-text">Email</label>
    <div class="uk-form-controls">
      <input class="uk-input uk-form-width-large" type="email" placeholder="Email" id="email" name="email">
    </div>
  </div>
  <div class="uk-margin">
    <label class="uk-form-label" for="form-stacked-text">Message</label>
    <div class="uk-form-controls">
      <textarea class="uk-textarea uk-form-width-large" rows="4" placeholder="Some Message...." id="enquiryMessage" name="enquiryMessage"></textarea>
    </div>
  </div>
  <p class="uk-text-right">
    <button class="uk-modal-close-default" type="button" uk-close></button>
    <button class="uk-button uk-button-primary submit uk-width-1-1" type="submit">Send</button>
  </p>
</form>

通过上面的代码,我得到了

419 抱歉,您的会话已过期。请刷新并重试。

我在 ajax 和 head 部分也设置了 CSRF-TOKEN,但似乎我的 js 代码没有获取 csrf 令牌。

如果有人能指出我上面犯的错误,我将非常感激。

【问题讨论】:

  • 页面中肯定有&lt;meta&gt;标签吗?
  • @RossWilson 是的,您可以在此链接上确认。 https://crusadehimalaya.com/和ajax形式在https://crusadehimalaya.com/trip/everest-base-camp-trek快速查询按钮。
  • 这个错误是显示为整个页面还是只是来自 ajax 请求的响应?
  • @RossWilson 它显示在整个页面中。
  • @RossWilson 我的 jquery 没有收到我的表单。

标签: javascript jquery laravel laravel-5.7


【解决方案1】:

尝试使用这个: {{ csrf_field() }} 而不是 @csrf

419 错误主要是因为 CSRF 令牌问题。

【讨论】:

  • 感谢@geek 的建议。但我正在尝试通过元标记从元标记获取 csrf 令牌。
猜你喜欢
  • 2019-03-06
  • 2021-03-05
  • 2021-09-07
  • 1970-01-01
  • 2018-10-06
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多