ajax错误400错误请求

时间:2017-05-18 12:12:22

标签: jquery ajax yii2

我正在尝试使用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);
                    }
         });

3 个答案:

答案 0 :(得分: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错误。 (通常缺少某些参数或标题)

答案 1 :(得分:0)

如果在yii2项目中启用enableCsrfValidation,则需要向ajax数据添加一个令牌以使请求有效。

@see

CSRF

CSRF Ajax

答案 2 :(得分:0)

我发现了我的错误..

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

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

现在它完美运作

感谢所有: - ))))))))