Я новичок в программировании, и я пытаюсь вызвать функцию, когда пользователь вводит данные и нажимает кнопку отправки. Я использую Yii2, и я не знаком с Ajax. Я попытался разработать функцию, но мое действие контроллера не вызвано.
Вот пример кода, который я пытаюсь:
просмотров / index.php:
<script> function myFunction() { $.ajax({ url: '<?php echo Yii::$app->request->baseUrl. '/supermarkets/sample' ?>', type: 'post', data: {searchname: $("#searchname").val() , searchby:$("#searchby").val()}, success: function (data) { alert(data); } }); } </script> <?php use yii\helpers\Html; use yii\widgets\LinkPager; ?> <h1>Supermarkets</h1> <ul> <select id="searchby"> <option value="" disabled="disabled" selected="selected">Search by</option> <option value="Name">Name</option> <option value="Location">Location</option> </select> <input type="text" value ="" name="searchname", id="searchname"> <button onclick="myFunction()">Search</button> <h3> </h3>
контроллер:
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: '<?php echo Yii::$app->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()
или вы можете отключить valdation csrf
правильный способ получить параметр CSRF – это данные [yii.getCsrfParam ()] = yii.getCsrfToken ()