在数据网格视图中,我有一个textinput字段,如果字段更新,我想调用控制器函数。因此,我在表格中加入了一个脚本,并准备了一个控制器功能。
$this->registerJs(
"$('#product_qty').on('click', function() {
alert('Button clicked!');
$.ajax({
url: '".Yii::$app->request->baseUrl . '/suppliers_orders/changequantity' . "',
type: 'post',
data: {
id: '5' ,
_csrf : '" . Yii::$app->request->getCsrfToken() . "'
},
success: function (data) {
console.log(data.search);
},
});
});",
\yii\web\View::POS_READY,
'my-button-handler'
);
将调用警报功能并显示“单击按钮”。然后没有任何事情发生。
Suppliers_orderController函数的控制器是:
public function actionChangequantity(){
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->post();
$id = $data['id'];
}
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'search' => $id,
];
}
此外,我想用phpstorm和xdebug跟踪活动,但调试过程不会在控制器的第一个断点处停止。缺少什么,或者我的JS功能错了吗?
答案 0 :(得分:1)
最重要的是,在Yii2
中你有\yii\helpers\Url::base();
得到baseurl而不是Yii::$app->request->baseUrl;
这是没有baseUrl的控制台中错误网址打印的原因,所以改变你的行< / p>
url: '".Yii::$app->request->baseUrl . '/suppliers_orders/changequantity' . "',
以下
url: '".\yii\helpers\Url::base(). '/suppliers_orders/changequantity' . "',
其次,如果您使用localhost路径而不是frontend
和backend
的虚拟主机,并且要访问controller/action
,您必须使用index.php
以及路径在web
之后如下
http://localhost/myproject/backend/web/index.php/suppliers_orders/changequantity