2014-09-11 7 views
0

Попытка добавить некоторые функции ajax в систему голосования и не работает. Я хочу отправить запрос на отправку в базу данных и обновить значение счетчика. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить работу с буфером запроса ajax в MVC.Codeigniter loading ajax request

Я хочу сохранить структуру 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; 

     }); 
    }); 
}); 

и PHP код в настоящее время проживающий в Ajax-vote.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? –

+0

ajax-vote - это простой файл в корне приложения - я бы хотел включить его в качестве приложения, иначе мне пришлось бы жестко программировать функциональность и добавлять дополнительные приложения в приложение. – jamper

ответ

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. когда я изменяю URL-адрес, чтобы включить мой домашний контроллер, т. е. base_url (home/vote), я получаю: Uncaught TypeError: Не могу прочитать свойство «createDocumentFragment» undefined - Означает ли это, что он нашел функциональность? – jamper

0

Вы должны поместить свой код в контроллер, а не в простом файле PHP! Затем вы можете перейти к Javascript codeigniters site_URL этот путь:

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

Вы должны сделать это с вашей точки зрения заголовка.

затем в вашем AJAX позвонить вы можете использовать эту переменную для построения пути:

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

теперь у вас есть PHP и JavaScript разделены.

Конечно, вы должны сделать AjaxController простирающегося CI_Controller, и поместить свой код внутри функции, называемой «Аякс» (или что вы хотите, просто убедитесь, что использовать такое же имя, что вы использовали в вызове Js)