2017-05-18 296 views
0

我想在yii2中使用ajax上傳文件。 但它瀏覽器控制檯它顯示400在我的site_url不好請求 什麼是我的錯誤。 請幫助任何人。ajax錯誤400錯誤的請求

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

如果在yii2項目中啓用enableCsrfValidation,則需要向ajax數據添加令牌以使請求生效。

@see

CSRF

CSRF Ajax

+0

yaa ..其crct ...我的錯誤是在csrf啓用驗證 – Prabhakaran

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錯誤如果您沒有發送數據到服務器,如其文檔中所述。 (通常缺少某些參數或標題)

+0

SRY。現在它也顯示同樣的錯誤jquery.min.js:4 POST HTTP://本地主機/基本/指數。 ?PHP R = FORMDATA%2Fmovefile&ID = 400 45bc9afa37281707(無效請求) 發送\t @ \t jquery.min.js:4 阿賈克斯\t @ \t jquery.min.js:4 (匿名)\t @ \t的index.php [R = formdata%2Fcreate&id = 31:493 each \t @ \t jquery.min.js:2 each \t @ \t jq uery.min.js:2 (匿名)\t \t @ index.php的R = FORMDATA%2Fcreate&ID = 31:471 派遣\t \t @ jquery.min.js:3 r.handle \t \t @ jquery.min。 js:3 – Prabhakaran

+0

@Prabhakaran是否按照文檔中所述傳遞所有參數? – Santosh

+0

yaa ..我檢查..它沒有錯 – Prabhakaran

0

我發現我的錯誤..

有我的控制器行動CSRF令牌錯誤..所以我在控制器

添加此下面的代碼
public function beforeAction($action) 
    { 
     if (in_array($action->id, ['movefile'])) { 
      $this->enableCsrfValidation = false; 
     } 
     return parent::beforeAction($action); 
    } 

現在,它的工作完美

感謝所有:-)))))))