我认为我有一个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);
                },
            });
        })");
    ?>


我需要向actionBlockUsersAdminController函数发送请求,如下所示:

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/

10-13 07:39