zoukankan      html  css  js  c++  java
  • yii2出现的400错误

    来一段百度来的正常解决方法,注意有很大的坑!

    第一种解决办法是关闭Csrf

    1配置文件关闭

    2控制器里面关闭

    public function init(){
        $this->enableCsrfValidation = false;
    }

    第二种解决办法是在form表单中加入隐藏域

    <input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">

    第三种解决办法是在AJAX中加入_csrf字段

    var csrfToken = $('meta[name="csrf-token"]').attr("content");
    $.ajax({
      type: 'POST',
      url: url,
      data: {_csrf:csrfToken},
      success: success,
      dataType: dataType
    });

    我用ajax提交的,又不想关闭csrf验证(不推荐),所以选择第三种解决方法,在data中添加

    参数   _csrf:csrfToken,之后试了很多次还是报错400,原因是_csrf 这个参数需要和你的配置文件定义的一致才行,

    不能直接使用_csrf

    例如我的main.php配置文件设置的名称是_csrf-frontend,所以你在ajax提交的数据也要使用_csrf-frontend,而不是_csrf

    要改为:

    var csrfToken = $('meta[name="csrf-token"]').attr("content");
    $.ajax({
      type: 'POST',
      url: url,
      data: {'_csrf-frontend':csrfToken},
      success: success,
      dataType: dataType
    });

    注意第二种解决方法中也要注意这个参数名

    还有问题要注意

     如果你的页面没有form的话,ajax的post提交是没问题的,用ajax的post提交会自动产生_csrf 

    如果你的页面是有form尤其是上传文件类型为file的话,ajax的post还是会出现400验证的

    假如文件上传接收为空值:注意配置文件ini这三个参数问题

    max_execution

    post_max_size

    upload_max_filesize

  • 相关阅读:
    找到数组中消失的所有数字-算法刷题总结
    爬楼梯-算法练习笔记
    最长公共前缀-刷题总结
    每日温度-算法详细分析
    买卖股票的最佳时机-算法详细分析
    回文数-算法详细分析
    合并两个有序链表-算法详细法分析
    最短无序连续子数组 | 算法详细分析
    整数反转-算法详细分析
    python设计模式之责任链模式
  • 原文地址:https://www.cnblogs.com/JahanGu/p/8492742.html
Copyright © 2011-2022 走看看