2015-03-03 5 views
13

Я новичок в программировании, и я пытаюсь вызвать функцию, когда пользователь вводит данные и нажимает кнопку отправки. Я использую Yii2, и я не знаком с Ajax. Я попытался разработать функцию, но мое действие контроллера не вызвано.Ajax + Controller Action в Yii2

Вот пример кода я пытаюсь:

просмотров/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"; 
} 

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

+0

Проверьте выход с помощью инструментов разработчика или firebug. Любые ошибки или коды ошибок? – topher

+0

Похоже, ошибок нет, но когда я звоню, поиск ничего не происходит. – user3640056

ответ

27

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

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

Я добавил ваш код, но проблема в том, что когда я нажимаю «Поиск», ничего не происходит, даже при отладке! – user3640056

+0

Вы находитесь внутри функции JavaScript, myFunction нужно вызвать. – ankitr

+0

Я вызываю свою функцию onclick: user3640056

2

вы должны пройти _csrf токин в качестве параметра

_csrf: yii.getCsrfToken() 

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

0

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