2016-01-15 291 views
2

我想通過AJAX數據發佈到一些特定的控制器是這樣的:400錯誤的請求2

<script> 
    var myUrl = "<?php echo Url::to(['table/edit']); ?>"; 
</script> 
$.ajax({ 
      type : "POST", 
      url : myUrl, 
      data: {id: userID}, 
      success : function(response) { 
       alert("Table is editted"); 
      } 
     }); 

和Controller我想這個發佈的數據,並做一些事情其他。 但是,當我嘗試這個我得到一個錯誤「400(壞請求)」。 如果有人可以幫助它會很好!謝謝!

+0

什麼是你的控制器的代碼? –

回答

1

只需添加CSRF,如:

 <script> 
     var myUrl = "<?php echo Url::to(['table/edit']); ?>";   
     </script> 
     $.ajax({ 
      type : "POST", 
      url : myUrl, 
      data: {id: userID,_csrf:'<?=\Yii::$app->request->csrfToken?>'}, 
      success : function(response) { 
       alert("Table is editted"); 
      } 
     }); 
+0

非常感謝!它添加「_csrf」後正在工作。 –

1

yii\web\BadRequestException(表示與代碼400的HTTP錯誤)可以在下列情況下被拋出:

1)無法驗證數據的提交。 CSRF驗證已啓用且失敗。我認爲這不是你的理由,因爲它默認啓用幷包含在元標記中。使用jQuery時,您不必手動發送它。

2)缺少所需的參數。

如果你有沒有默認值的參數,例如:

public function actionTest($someParam) 
{ 
    ... 
} 

如果你沒有通過someParam,會拋出異常。

3)請求正文中的JSON數據無效。

如果您發送JSON作爲參數並且它不是有效的JSON。

4)收到的參數數據無效。期間綁定參數拋出的異常動作:

if ($param->isArray()) { 
    $args[] = $actionParams[$name] = (array) $params[$name]; 
} elseif (!is_array($params[$name])) { 
    $args[] = $actionParams[$name] = $params[$name]; 
} else { 
    throw new BadRequestHttpException(Yii::t('yii', 'Invalid data received for parameter "{param}".', [ 
     'param' => $name, 
    ])); 
} 

最後兩個很少見面,特別是最後一個(不記得,甚至單一的時間,當我遇到它)。

這些應該是目前所有可能的情況,我通過來源進行全球搜索以確保。

+0

我想我有問題編號3.你有一個簡單的JavaScript例子嗎? –