Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter加载ajax请求_Php_Jquery_Codeigniter - Fatal编程技术网

Php Codeigniter加载ajax请求

Php Codeigniter加载ajax请求,php,jquery,codeigniter,Php,Jquery,Codeigniter,试图在投票系统中添加一些ajax功能,但它不起作用。我想向数据库发送一个post请求并更新计数值。我遇到的问题是,我似乎无法在MVC中实现ajax请求 我确实希望保留MVC结构 jquery代码是: <script> $( document ).ready(function() { $( "#vote li a" ).each(function( index ) { $(this).click(function(){ $.ajax =

试图在投票系统中添加一些ajax功能,但它不起作用。我想向数据库发送一个post请求并更新计数值。我遇到的问题是,我似乎无法在MVC中实现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>';
提前感谢。

如果您正在使用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;

        });  
    });
});

您必须将代码放入控制器,而不是简单的php文件中!然后您可以向javascript传递codeigniters站点的url路径,如下所示:

<script> var site_url = '<?php echo site_url()?>';</script>
现在php和javascript已经分开了


当然,您必须做一个AjaxController扩展CI_控制器,并将代码放入一个名为ajax的函数或任何您想要的函数中,只需确保使用与js调用中使用的名称相同的名称

我不能在应用程序框架外引用ajax-vote.php,它会破坏url结构。当我更改url以包含我的主控制器ie base_urlhome/vote时,我得到:Uncaught TypeError:无法读取未定义的属性“createDocumentFragment”-这是否意味着找到了该功能?ajax vote是CI设置之外的控制器还是普通文件?ajax vote是应用程序根目录中的普通文件-我想包括它作为应用程序,否则我将不得不硬编码的功能,并添加额外的膨胀到应用程序。
        $.ajax({
          url: site_url + "ajaxcontroller/vote",
          cache: false,
          data: { id: id, value: value }
        })
         .done(function( html ) {
            $(this).html( html );
         });