1

我在使用 ajax 和 codeigniter 时遇到了一些问题。我已经发布了另一个问题(指向问题的链接),我以为我解决了它,但我没有,所以我要求某人使用 ajax/codeigniter 编写简单的代码,这将在点击时增加 div/span 内的数字。

我在最近几天尝试这样做,但不断出错..我的 CI 设置是:
base_url:localhost/test/
index:index.php
autoload:url
default controller:welcome(我把它留给了这个测试)

我很乐意有一个简单的例子来做到这一点。我也试过了,又一次,但没有任何运气。这是我这次尝试的:

控制器(welcome.php)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {


function __construct()
    {
        parent::__construct();
    }

public function index()
{
    $this->load->view('welcome_message');
}

function increase(){
    $increase = $this->input->post('increase');
    echo increase++;
}
}

JS(阿贾克斯)

function increase(){
var number = parseInt($('#number').html()) + 1;
$.ajax({
        type: 'POST',
        url: 'localhost/test/welcome/increase',
        data: { increase:number },
        success:function(response){
            $('#number').html(response);
        }
});

}

视图 (HTML/CSS)

<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript"></script>
<script type="text/javascript" src="<?php echo base_url();?>assets/js/jquery_v1.9.1.js"> </script>
<script type="text/javascript" src="<?php echo base_url();?>assets/js/script.js">            </script>
<style type="text/css">
#number {
display: block;
text-align: center;
width: 100px;
height: 30px;
margin: auto auto;
line-height: 30px;
border: 1px solid #999999;
border-radius: 5px;
}

</style>
</head>
<body>
    <span id="number" onclick="increase()">0</span>
</body>
</html>

我在 Windows 7 上使用最新的 xampp。单击 span 时出现错误 -POST http://localhost/test/localhost/test/welcome/increase 404 (Not Found)

4

8 回答 8

1

如果您在 config.php 中启用了 CSRF,您必须从 cookie 提交 CSRF 令牌,否则请求将无效。

您可以使用此插件在 javascript 中检索 cookie。只需将其传递给 CI。

ci_token

ci_cookie

密钥可能不同,可以在 config.php 中找到

我还建议为请求设置路由并使用

网站网址()

超过

base_url()

var SITE = "<?php echo site_url();?>" // GLOBAL variable so your javascripts can be external

-

var data = { 'ci_token' : $.cookies.get('ci_cookie'), 'increase' : parseInt(number)}
$.ajax({
    url : SITE + "/link/to/controller/method",
    data : data,
});
于 2013-05-05T11:44:06.323 回答
0

首先,您应该在 application/config 文件中定义您的站点 base_url,然后将此 base_url 与您的 ajax 页面调用一起使用。假设你base_urlhttp://localhost/test/

function increase(){
   var number = parseInt($('#number').html()) + 1;
   $.post('<?php echo base_url()?>welcome/increase',{number :number},function(response){
          $('#number').html(response);
   });    
}

然后像这样在控制器中更改您的增加功能

function increase(){
   $increase = $_POST['number'];
echo increase++;

}

于 2013-08-03T01:37:37.573 回答
0

在您的 ajax 中,不要为您的 JS 使用外部链接,只需使用内部链接。

确保http://localhost/test/在 config.php 中设置了 $config['base_url'] =

function increase(){
    var number = parseInt($('#number').html()) + 1;
    $.ajax({
        type: 'POST',
        url: '<?php echo base_url()?>welcome/increase',
        data: { increase:number },
        success:function(response){
           $('#number').html(response);
        }
   });

}
于 2013-05-05T09:54:37.790 回答
0
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript"></script>
<script type="text/javascript" src="<?php echo base_url();?>assets/js/jquery_v1.9.1.js"> </script>
<script type="text/javascript" src="<?php echo base_url();?>assets/js/script.js">            </script>
<style type="text/css">
  #number {
    display: block;
    text-align: center;
    width: 100px;
    height: 30px;
    margin: auto auto;
    line-height: 30px;
    border: 1px solid #999999;
    border-radius: 5px;
  }

</style>
</head>
<script>
function increase(){
  var number = parseInt($('#number').html()) + 1;
  $.ajax({
      type: 'POST',
      url: '<?php echo base_url()?>welcome/increase',
      data: { increase:number },
      success:function(response){
         $('#number').html(response);
      }
  });

}
</script>
<body>
<span id="number" onclick="increase()">0</span>
</body>
</html>
于 2013-05-05T10:03:52.933 回答
0

使用site_url()代码点火器

 function increase(){
   var number = parseInt($('#number').html()) + 1;  
   $.ajax({
     type: 'POST',
     url: '<?php echo site_url("welcome/increase")?>',
     data: { increse:number }, //<--- here should be increase
     success:function(response){
        $('#number').html(response);
     }
  });

}

但是,http://在 localhost 前面添加应该可以

 url: 'http://localhost/test/welcome/increase',

但如果您在 CI 中调用控制器,它总是更好并且建议使用site_url()......这样当您将其上传到实时服务器时,这不会给您错误。

于 2013-05-04T21:01:23.777 回答
0

尝试这个 :

function increase(){
        var number = parseInt($('#number').html()) + 1;
        $.ajax({
            type: 'POST',
            url: 'localhost/test/Welcome/increase/',
            data: "increase=" + number,
            dataType: "text",
            success:function(response){
                $('#number').html(response);
            }
        });

 }
于 2017-02-04T18:22:21.343 回答
0

如果你在 .php 文件中使用这个 ajax,那么你应该对你的 url 做这样的事情:

function increase(){
var number = parseInt($('#number').html()) + 1;
var base_url = "<?php echo base_url();?>";
$.ajax({
    type: 'POST',
    url: base_url+'welcome/increase',
    data: { increase:number },
    success:function(response){
        $('#number').html(response);
    }
  });
}

或者,如果您在 .js 文件中执行此操作,则需要在 head 标记内添加此行

<script> var base_url = "<?php echo base_url();?>";</script>

而不是使用这个:

function increase(){
var number = parseInt($('#number').html()) + 1;
$.ajax({
    type: 'POST',
    url: base_url+'welcome/increase',
    data: { increase:number },
    success:function(response){
        $('#number').html(response);
    }
  });
}

希望它能解决问题。但是,在本地环境中开发时,在 config.php 中设置 base_url 总是一个好主意,如下所示:

$root = "http://".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['base_url']    = $root;
于 2017-02-26T09:51:27.997 回答
-1
View::::::    
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="<?php echo base_url();?>css/jquery.js"> </script>
<style type="text/css">
#number {
display: block;
text-align: center;
width: 100px;
height: 30px;
margin: 50px auto;
line-height: 30px;
border: 1px solid #999;
border-radius: 5px;
}
body{
cursor: default;
}
</style>
</head>
<script>
function increase(){
var number = parseInt($('#number').html());
$.ajax({
  type: 'POST',
  url: '<?php echo base_url()?>main/samp_data',
  data: { increase:number },
  success:function(response){
     $('#number').html(response);
  }
  });
 }
</script>
<body>
<span id="number" onclick="increase()">0</span>
</body>
</html>




Controller::::::
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Main extends CI_Controller {

    public function index(){
        $this -> load -> view('sample_view');
    }

    public function samp_data(){
        $increase = $this->input->post('increase');
        echo ++$increase;
    }
}
于 2014-08-28T08:49:14.657 回答