javascript - 无法通过 xhr 请求将 post 参数传递给 yii2 Controller

标签 javascript yii2

在我的项目中,我正在向 yii2 Controller 发出 xhr 请求

在我看来,请求的结构是这样的

var xhr = new XMLHttpRequest();

xhr.open('POST', '$urlToController', true);
xhr.setRequestHeader("Content-type","application/json");                
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

xhr.onreadystatechange = function () {
     if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
           console.log(xhr.responseText);
     }
};

// Print on console first
console.log({ id: JSON.stringify($('#grid').yiiGridView('getSelectedRows')), _csrf : csrfToken}); 


xhr.send({ id: JSON.stringify($('#grid').yiiGridView('getSelectedRows')), _csrf : csrfToken}});

这是我的 Controller :

public function actionTargetController() {

    if(Yii::$app->request->isAjax) {

        Yii::$app->response->format = Response::FORMAT_JSON;

        if (Yii::$app->request->isPost) {

            $post = Yii::$app->request->post();
            return $post; // Print $post 
        }
   }
}

当我尝试使用 xhr.send() 发送数据时,我在 yii2 Controller 中没有收到任何内容,并且我得到的响应始终是“[]”(空数组)

我也尝试使用 FormData 对象发送数据,但结果是相同的。

我哪里做错了?预先感谢您的所有帮助

PS:

_csrf 参数也未通过,因此我在 beforeAction 方法中禁用了 csrf 验证。

最佳答案

更改 MIME 类型并更改您发布的数据。

var xhr = new XMLHttpRequest();

xhr.open('POST', '$urlToController', true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // <------ other mime type               
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

xhr.onreadystatechange = function () {
     if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
           console.log(xhr.responseText);
     }
};

var params = $('#grid').yiiGridView('getSelectedRows')
    .map(function (value) { return "selectedRowIds[]=" + value;  }).join("&");

xhr.send("_csrf=" + csrfToken + (params ? "&" + params : ""));

现在您可以通过以下方式获取操作中发布的数据:

$post = Yii::$app->request->post('selectedRowIds');

你得到一个整数数组。

您也可以使用 jQuery 来实现此目的,因为您已经在使用它了。更容易:

var params = {selectedRowIds: $('#grid').yiiGridView('getSelectedRows'), _csrf : csrfToken};
$.post('$urlToController', params).done(function(data) {
    console.log(data);
}) 

关于javascript - 无法通过 xhr 请求将 post 参数传递给 yii2 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913273/

相关文章:

MySql 在 Yii2 中有条件地选择最小值、最大值而没有子选择

javascript - Recaptcha V3 错误错误-captcha-sol 随机

javascript - AngularJS ng-repeat 在填充表时创建三个空行并且 ng-repeat 不重复

php - Yii2 在不使用 GridView 的情况下显示数据库中的数据

php - Yii2:从供应商目录中的 Controller 运行控制台命令

validation - yii2 条件验证在服务器端不起作用?

php - 如何在 php 中使用 graph api 在 Instagram 上发帖

javascript - Prop 未传递给 Child

javascript - Jquery,同时,每个: how to test if all :selected is not 0

javascript - 我们可以在删除父节点之前复制该节点吗?