我认为我有一个AJAX通话。它的代码如下:
<?php
$this->registerJs("
$(document).on('click','.btn-block',function(){
var id = $(this).parents('.user-tr').attr('id');
$.ajax({
url: '" . Yii::$app->request->baseUrl . "admin/block-users',
type: 'POST',
data: {id : id,_csrf : " . Yii::$app->request->getCsrfToken() . "},
success: function (data) {
console.log(data);
},
});
})");
?>
我需要向
actionBlockUsers
的AdminController
函数发送请求,如下所示:public function actionBlockUsers()
{
if (Yii::$app->request->isAjax) {
print("success");
}
}
问题是我无法发送请求。检查XHR也不显示任何内容。我该如何解决这个问题?
最佳答案
您需要将Yii::$app->request->getCsrfToken()
包装在引号中,因为它通常会在字符串中包含==
,如果不在qutotes中,它将破坏脚本,使用javascript时,更好的方法是使用yii.js
获取csrf令牌和参数名称使用yii.getCsrfParam()
和yii.getCsrfToken()
,而不是硬编码_csrf
。
另外,您应该尝试使用hereDOC语法以提高可读性。
因此,在您的视图中将代码替换为以下代码
$baseUrl=\yii\helpers\Url::base(true);
$js=<<<JS
$(document).on('click','.btn-block',function(e){
var id = $(this).parents('.user-tr').attr('id');
let data={id : id};
data[yii.getCsrfParam()]=yii.getCsrfToken();
$.ajax({
url: '{$baseUrl}/admin/block-users',
type: 'POST',
data: data,
success: function (data) {
console.log(data);
},
});
})
JS;
$this->registerJs($js, View::POS_READY);
关于javascript - AJAX调用无法发送请求Yii2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57506614/