2014-09-11 150 views
0

試圖在投票系統中添加一些ajax功能,但它不工作。我想向數據庫發送發佈請求並更新計數值。我遇到的問題是,我似乎無法獲得MVC內的Ajax請求。Codeigniter加載ajax請求

我確實想保留MVC結構。

jQuery代碼是:

<script> 
$(document).ready(function() { 
    $("#vote li a").each(function(index) { 
     $(this).click(function(){ 
      $.ajax = ajax(); 
      var id = $(this).attr('data-scenario-id'); 
      var value = $(this).attr('data-value'); 

      $.ajax({ 
       url: "ajax-vote.php", 
       cache: false, 
       data: { id: id, value: value } 
      }) 
      .done(function(html) { 
       $(this).html(html); 
      }); 

      return false; 

     }); 
    }); 
}); 

和當前駐留在Ajax的vote.php PHP的代碼是:預先

$id = isset($_GET['id']) ? $_GET['id'] : null; 
$value = isset($_GET['value']) ? $_GET['value'] : null; 

$query = $this->db->query('SELECT count FROM total_counts WHERE scenario_id = ' . $id . ' AND interaction_id = ' . $value); 

$row = $query->row(); 
$count = $row->name; 
$count++; 

$query = $this->db->query('UPDATE total_counts SET count = ' . $count); 
$query = $this->db->query('SELECT count FROM total_counts WHERE scenario_id = ' . $id . ' AND interaction_id = ' . $value); 
$row = $query->row(); 
$count = $row->name; 

switch ($value) { 
case 1: 
    $text = 'OK '. $count; 
    break; 
case 2: 
    $text = 'NOT OK'. $count; 
    break; 
case 3: 
    $text = 'ABUSE'. $count; 
    break; 
} 

echo '<a href="#" data-scenario-id="'.$id.'" data-value="'.$value.'">'. $text .'</a>'; 

感謝。

+0

是ajax-vote是一個控制器還是一個在你的CI設置之外的純文件? – 2014-09-11 14:54:39

+0

ajax-vote是應用程序根目錄中的純文件 - 我想將其作爲應用程序包含在其中,否則我將不得不對應用程序進行硬編碼併爲應用程序添加額外的膨脹。 – jamper 2014-09-11 15:03:12

回答

0

如果您使用的是codeigniter,那麼您必須給url中的控制器路徑。我假設你的控制器的名字Ajax的vote.php比你的Ajax代碼將

$(document).ready(function() { 
    $("#vote li a").each(function(index) { 
     $(this).click(function(){ 
      $.ajax = ajax(); 
      var id = $(this).attr('data-scenario-id'); 
      var value = $(this).attr('data-value'); 

      $.ajax({ 
       url: "<?php echo base_url(); ?>ajax-vote", 
       cache: false, 
       data: { id: id, value: value } 
      }) 
      .done(function(html) { 
       $(this).html(html); 
      }); 

      return false; 

     }); 
    }); 
}); 
+0

我不能在應用程序框架之外引用ajax-vote.php,它會破壞url結構。當我更改網址,包括我的家庭控制器,即base_url(家庭/投票)我得到:Uncaught TypeError:無法讀取未定義的屬性'createDocumentFragment' - 這是否意味着它的功能? – jamper 2014-09-11 14:05:58

0

你必須把你的代碼放到一個控制器,而不是一個簡單的PHP文件!然後你可以傳遞給javascript codeigniters site_url這樣的路徑:

<script> var site_url = '<?php echo site_url()?>';</script> 

你必須在你的標題視圖中做到這一點。

然後在阿賈克斯以後叫你可以使用這個變量來構建路徑:

 $.ajax({ 
      url: site_url + "ajaxcontroller/vote", 
      cache: false, 
      data: { id: id, value: value } 
     }) 
     .done(function(html) { 
      $(this).html(html); 
     }); 

現在你有PHP和JavaScript分開。

當然,你需要做的擴展是CI_Controller的AjaxController,並把你的代碼中調用的函數內部「AJAX」(或任何你想要的,只要確保使用相同的名稱,你在js調用中使用的)