我正在尝试使用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);
}
});
答案 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)
答案 2 :(得分:0)
我发现了我的错误..
我的控制器操作中有csrf令牌错误..所以我在控制器中添加以下代码
public function beforeAction($action)
{
if (in_array($action->id, ['movefile'])) {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
现在它完美运作
感谢所有: - ))))))))