Yii2中的Ajax + Controller Action
我是编程新手,我正在尝试在用户输入数据并单击提交按钮时调用函数。 我正在使用Yii2而且我不熟悉Ajax。 我尝试开发一个函数,但我的控制器操作没有被调用。
这是我正在尝试的示例代码:
意见/ index.php文件:
function myFunction() { $.ajax({ url: 'request->baseUrl. '/supermarkets/sample' ?>', type: 'post', data: {searchname: $("#searchname").val() , searchby:$("#searchby").val()}, success: function (data) { alert(data); } }); } Supermarkets
Search by Name Location
控制器:
public function actionSample(){ echo "ok"; }
我的问题是当我点击“搜索”按钮时没有任何反应,当我尝试调试它时,调试器不会运行任何代码!
这是您可以根据需要修改的示例
public function actionSample() { if (Yii::$app->request->isAjax) { $data = Yii::$app->request->post(); $searchname= explode(":", $data['searchname']); $searchby= explode(":", $data['searchby']); $searchname= $searchname[0]; $searchby= $searchby[0]; $search = // your logic; \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return [ 'search' => $search, 'code' => 100, ]; } }
如果这成功,您将获得Ajax成功块中的数据。 见浏览器控制台。
$.ajax({ url: 'request->baseUrl. '/supermarkets/sample' ?>', type: 'post', data: { searchname: $("#searchname").val() , searchby:$("#searchby").val() , _csrf : '=Yii::$app->request->getCsrfToken()?>' }, success: function (data) { console.log(data.search); } });
你必须将_csrf tokin作为参数传递
_csrf: yii.getCsrfToken()
或者你可以禁用csrf valdation
获得CSRF参数的正确方法是:
data[yii.getCsrfParam()] = yii.getCsrfToken()