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 : 'request->getCsrfToken()?>' }, success: function (data) { console.log(data.search); } }); 

你必须将_csrf tokin作为参数传递

 _csrf: yii.getCsrfToken() 

或者你可以禁用csrf valdation

获得CSRF参数的正确方法是:

 data[yii.getCsrfParam()] = yii.getCsrfToken()