Подтвердить что ты не робот

Действие Ajax + Controller в Yii2

Я новичок в программировании, и я пытаюсь вызвать функцию, когда пользователь вводит данные и нажимает кнопку отправки. Я использую 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";
}

Моя проблема в том, что когда я нажимаю кнопку "Поиск", ничего не происходит, и когда я пытаюсь ее отладить, отладчик не запускает код!

4b9b3361

Ответ 1

Это образец, который вы можете изменить в соответствии с вашими потребностями

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);
       }
  });

Ответ 2

вам нужно передать _csrf tokin в качестве параметра

_csrf: yii.getCsrfToken()

или вы можете отключить valdation csrf

Ответ 3

правильный способ получить параметр CSRF - это data [yii.getCsrfParam()] = yii.getCsrfToken()