【问题标题】:ajax error 400 bad requestajax 错误 400 错误请求
【发布时间】:2017-05-19 12:49:42
【问题描述】:

我正在尝试在 yii2 中使用 ajax 上传文件。 但它的浏览器控制台在我的 site_url 中显示 400 Bad Request 我的错是什么。。 请帮助任何人。

var site_url = '<?php echo Url::to (['formdata/movefile','id'=>'']); ?>' + unic ;
                 var file_data = $('#formdata-'+ form + '-' + component + '-c_data').prop('files')[0];
                      var form_data = new FormData();                  
                      form_data.append('file', file_data);

                       $.ajax({
                    url: site_url, // point to server-side PHP script 
                    dataType: 'TEXT',  // what to expect back from the PHP script, if anything
                    cache: false,
                    contentType: false,
                    processData: false,
                    data: { form_data:form_data,_csrf : '<?=Yii::$app->request->getCsrfToken()?>'},                         
                    type: 'POST',
                    success: function(php_script_response){
                       alert(php_script_response);
                    }
         });

【问题讨论】:

    标签: jquery ajax yii2


    【解决方案1】:

    我认为您需要将 contentType 设置为 json,因为您正在发送 json 数据

    contentType: "application/json"
    

    所以你的 ajax 请求会是这样的

    $.ajax({ url: site_url, dataType: 'TEXT',  cache: false, contentType: "application/json", processData: false, data: { form_data:form_data,_csrf : '<?=Yii::$app->request->getCsrfToken()?>'}, type: 'POST', success: function(php_script_response){ alert(php_script_response); }
    

    如果您没有按照文档中的说明将数据发送到服务器,您也可能会收到 400 Bad request 错误。 (通常缺少某些参数或标题)

    【讨论】:

    • sry.. 现在它也显示相同的错误 jquery.min.js:4 POST localhost/basic/… 400 (Bad Request) send @ jquery.min.js:4 ajax @ jquery.min.js: 4(匿名)@index.php?r=formdata%2Fcreate&id=31:493 每个@jquery.min.js:2 每个@jquery.min.js:2(匿名)@index.php?r=formdata%2Fcreate&id= 31:471 调度@jquery.min.js:3 r.handle@jquery.min.js:3
    • @Prabhakaran 您是否按照文档中的说明传递所有参数?
    • 主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。这是什么错误
    • 成功后添加错误:{}回调部分(类似于成功)并将错误打印到控制台
    • @Prabhakaran 网络调用不应发生在主线程中。如果您在 jquery ajax 请求中设置async:false,通常会发生这种情况
    【解决方案2】:

    如果你在你的yii2项目中启用了enableCsrfValidation,你需要给ajax数据添加一个token来使请求生效。

    @见

    CSRF

    CSRF Ajax

    【讨论】:

    • yaa.. 它的 crct... 我的错误在于 csrf 启用验证
    【解决方案3】:

    我发现我的错误..

    我的控制器操作中有 csrf 令牌错误.. 所以我在控制器中添加以下代码

    public function beforeAction($action)
        {
            if (in_array($action->id, ['movefile'])) {
                $this->enableCsrfValidation = false;
            }
            return parent::beforeAction($action);
        }
    

    现在完美运行

    感谢大家:-)))))))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2020-09-21
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多