在我的项目中,我正在向 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/