为什么 jquery ajax post 请求在 yii2 中出错?

Why jquery ajax post request get error in yii2?

js:

$.ajax({
        url: '/site/updateuserdata',
        method: 'POST',
        //async: true,
        //cache:false,
        data: {
            'type': 'sort'
            //val: val
            //csrfParam: csrfToken
        },
        dataType: 'text',
        error: function(jqXHR, textStatus, errorThrown) {
            alert('error by ajax');
        },
        success: function(data, status, jqXHR) {
            alert('success by ajax');
        }
    });

控制器:

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['updateuserdata'],
                    'allow' => true,
                    // 'roles' => ['*'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'updateuserdata' => ['post'],
            ],
        ],
    ];
}

public function actionUpdateuserdata()
{
    /*if (Yii::$app->request->isAjax) {
        $message = 'Ваше сообщение успешно отправлено';
        Yii::$app->response->format = Response::FORMAT_JSON;
        $response = [
            'success' => true,
            'message' => $message
        ];
        return $response;
    }*/
    $f = fopen('testajax.txt','a+');
    fwrite($f, 'ajax: '.(isset($_POST['type'])?$_POST['type']:'error'));
    fclose($f);
    if(isset($_POST['type']))
        return $_POST['type'];
    else return 'error1';
    // return Yii::$app->getResponse()->redirect(Yii::$app->request->referrer, 302, FALSE);
}

yii.js:

function initRedirectHandler() {
    // handle AJAX redirection
    $(document).ajaxComplete(function (event, xhr) {
        var url = xhr && xhr.getResponseHeader('X-Redirect');
        alert(url);  //my code
        if (url) {
            window.location.assign(url);
        }
    });
}

我看到第一个 alert(ajax error) "error by ajax" 然后是 alert(yii.js) "..../site/updateuserdata...",为什么 ajax错误?文件 testajax.txt 未创建。 我尝试评论 'updateuserdata' => ['post'],,但也出现错误。

已更新。

另外,试过:

public function beforeAction($action)
{            
    if ($action->id == 'updateuserdata') {
        $this->enableCsrfValidation = false;
    }

    return parent::beforeAction($action);
}

并取消注释 ajax 中的 csrf 参数。 并且 'error' return 状态 302(jqXHR.status).

dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

因为你评论了

//csrfParam: csrfToken

从您的 ajax js 文件中,您的 ajax.

中有 400 http 状态代码

所以你可以通过两种方式解决:

一个: 通过添加

禁用 csrf validation
$this->enableCsrfValidation = false; 

在您的 actionUpdateuserdata 方法中。

两个:csrf tokencsrf param 添加到您的 ajax.

在您的 js 中打印此代码,在您注释的地方。

Yii::$app->request->csrfParam . ':' . Yii::$app->request->csrfToken

那么您的请求发送成功,如果您有其他错误,您必须检查您的代码。

我发现了问题,这是个愚蠢的问题:

url: '/mag/updateuserdata/',

我在 'urlManager':

'suffix' => '/',

我认为这是为所有人添加的,但不是.....