2015-03-03 8 views
13

Programlamada yeniyim ve kullanıcı verileri girdiğinde ve tıklat düğmesini tıklattığında bir işlevi çağırmaya çalışıyorum. Yii2 kullanıyorum ve Ajax'a aşina değilim. Bir işlev geliştirmeyi denedim, ancak denetleyici eylemim çağrılmadı. İşte Yii2'de Ajax + Denetleyici İşlemi

deniyorum örnek kod şudur:

görüntüleme/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> 

Denetleyici:

public function actionSample(){   
    echo "ok"; 
} 

Benim sorundur ben Ara tıkladığınızda o hiçbir şey olmuyor ve hata ayıklamaya çalıştığımda, hata ayıklayıcı kod çalıştırmaz!

+0

Çıktıyı geliştirici araçları veya firebug kullanarak kontrol edin. Herhangi bir hata veya hata kodu? – topher

+0

Hata yok gibi görünüyor, ancak aradığımda hiçbir şey olmuyor. – user3640056

cevap

27

Bu, gerek

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, 
    ]; 
    } 
} 

göre değiştirebilir örnektir bu irade başarı Eğer Ajax başarı bloktaki verileri alırsınız. Tarayıcı konsolu bakın.

$.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

Kodunuzu ekledim, fakat sorun şu ki, Arama tıklandığında herhangi bir şey olmuyor, hatta hata ayıklama olsa bile! – user3640056

+0

JavaScript'in içinde iseniz, MyFunction'un çağrılması gerekiyor. – ankitr

+0

Fonksiyonumu çağırıyorum onclick: user3640056

2

bir parametre

_csrf: yii.getCsrfToken() 

olarak _csrf tokin geçmek zorunda veya csrf Endüstride benzetim

0

[CSRF param bu verileri olan yii.getCsrfParam (elde etmek için doğru bir şekilde devre dışı bırakmak)] = yii.getCsrfToken()