php - 设置 processData : false, contentType : false, 时 CSRF token 不匹配

标签 php jquery ajax laravel multipartform-data

嘿,大家好,我正在尝试使用 ajax 将文件发送到 Laravel 服务器,因为我需要创建表单数据并通过 ajax 请求发送它,为了防止非法调用,我需要设置这些

 processData: false,
 contentType: false,

这是我的代码->

$("#saveChanges").click(function () {
    let formData = new FormData();

    formData.append("banner", $("input[name='banner']"));

    $.ajax({
        url: "/save/website/data",
        type: "POST",

        data: {
            pickUpBtnColor: $("input[name='pickUpBtnColor']").val(),
            banner: $("input[name='banner']").val(),
            logo: $("input[name='logo']").val(),
            _token: $('meta[name="csrf"]').attr("content"),
            formData: formData,
        },
        processData: false,
        contentType: false,
        success: function (data) {
            console.log(data);
        },
        error: function (error) {
            console.log(error);
        },
    });
});

但是当我设置这些时,我的 csrf 也被忽略,并且服务器响应“CSRF token 不匹配”。 有人有解决办法吗?

最佳答案

问题是因为您需要将所有表单字段值放置在单个 FormData 对象中并将其发送到请求中。

$("#saveChanges").click(function() {
  let formData = new FormData();
  formData.append("banner", $("input[name='banner']"));
  formData.append('pickUpBtnColor', $("input[name='pickUpBtnColor']").val());
  formData.append('banner', $("input[name='banner']").val());
  formData.append('logo', $("input[name='logo']").val());
  formData.append('_token', $('meta[name="csrf"]').attr("content");

  $.ajax({
    url: "/save/website/data",
    type: "POST",
    data: formData,
    processData: false,
    contentType: false,
    success: function(data) {
      console.log(data);
    },
    error: function(error) {
      console.log(error);
    },
  });
});

请注意,如果您的 input 元素包含在表单中,您可能会简化此操作; Hook 到 form 元素的 submit 事件而不是按钮的 click 事件,然后调用 let formData = new FormData(引用您的表格此处);。以这种方式使用构造函数时,不需要 append() 调用。

关于php - 设置 processData : false, contentType : false, 时 CSRF token 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67968970/

相关文章:

javascript - 在页面加载时使用 JavaScript 劫持点击事件

php - 如何获取mysql中的最后一个同类?

php - IPTC 数据管理库

javascript - 用于键盘输入或通过 javascript 更改的事件绑定(bind)

javascript - 如何在javascript中连续删除带有两个管道字符的管道

javascript - 根据设置的 cookie 切换 Flash 视频播放器的配色方案

javascript - 在我的网站中记录基准和错误的最佳方法是什么?

c# - 带有 UpdatePanel 回发的 ajax "loading"图标

php - 如何根据另一个文本框的值使用 jQuery 自动完成文本框

php - 忽略 Composer 的特定要求