2015-03-03 26 views
13

Tôi là người mới lập trình và tôi đang cố gắng gọi một hàm khi người dùng nhập dữ liệu và nhấn nút gửi. Tôi đang sử dụng Yii2 và tôi không quen thuộc với Ajax. Tôi đã thử phát triển một chức năng, nhưng hành động điều khiển của tôi không được gọi.Hành động Ajax + Bộ điều khiển trong Yii2

Đây là đoạn mã ví dụ tôi đang cố gắng:

views/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> 

Bộ điều khiển:

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

Vấn đề của tôi là khi tôi click vào nút Search nút không có gì xảy ra, và khi tôi cố gắng gỡ lỗi nó, trình gỡ lỗi không chạy mã!

+0

Kiểm tra đầu ra bằng cách sử dụng công cụ nhà phát triển hoặc firebug. Bất kỳ lỗi hoặc mã lỗi nào? – topher

+0

Dường như không có lỗi, nhưng khi tôi bấm vào Tìm kiếm không có gì xảy ra. – user3640056

Trả lời

27

Đây là mẫu mà bạn có thể sửa đổi theo nhu cầu của bạn

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

Nếu di chúc thành công này, bạn sẽ nhận được dữ liệu trong khối thành công Ajax. Xem bảng điều khiển trình duyệt.

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

Tôi đã thêm mã của bạn, nhưng vấn đề là khi tôi nhấp vào Tìm kiếm không có gì xảy ra, ngay cả khi đang gỡ lỗi! – user3640056

+0

là bạn bên trong hàm JavaScript, myFunction cần được gọi. – ankitr

+0

Tôi đang gọi chức năng của mình onclick: user3640056

2

bạn phải vượt qua _csrf Tokin như một tham số

_csrf: yii.getCsrfToken() 

hoặc bạn có thể vô hiệu hóa CSRF valdation

0

cách chính xác để có được param CSRF là này dữ liệu [yii.getCsrfParam ()] = yii.getCsrfToken()

Các vấn đề liên quan