2016-01-15 258 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例子吗? –