从js文件到yii2控制器函数的ajax请求

时间:2014-05-15 13:13:03

标签: php yii2

function facebookAuth() {
    $.ajax({
        url: 'index.php?r=account/fbauthorize',
        type: 'GET'
    });
}

这是一个简单的函数,我只是为了在控制器中调用函数,GET类型工作正常,但POST没有。给我这个错误"错误请求(#400):无法验证您的数据提交。"

它与yii2中的CSRF验证有关,但我无法解决它。

3 个答案:

答案 0 :(得分:4)

有两个重要步骤:

1)按如下方式注册您的js文件:

$this->registerJsFile(Yii::$app->homeUrl . 'js/test.js', [JqueryAsset::className()]);

2)在ajax请求中,您需要将以下值与数据一起发布:

yii.getCsrfParam(): yii.getCsrfToken()

CSRF是一种安全功能,可以在控制器中禁用,但不建议这样做。

答案 1 :(得分:0)

将这两行添加到您的代码中

contentType: "application/json; charset=utf-8",
dataType: "json",

这将是

$.ajax({
    url: 'index.php?r=account/fbauthorize',
    type: 'GET',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
});

<小时/> 享受:)

答案 2 :(得分:0)

确保设置正确的访问方法。

public function behaviors()
{
    return [
        'verbs' => [
            'class' => \yii\filters\VerbFilter::className(),
            'actions' => [
                'fbauthorize'  => ['post'],
            ],
        ],
    ];
}

http://www.yiiframework.com/doc-2.0/yii-filters-verbfilter.html