我在使用ajax和codeigniter时遇到了一些问题。我已经发布了另一个问题(link to question),我认为我解决了它,但我没有这样做,我要求别人用ajax / codeigniter编写简单的代码,这将增加div / span中的数字。
我在最近几天尝试这样做,但经常出错。我的CI设置是:
base_url:localhost/test/
指数:index.php文件
自动加载:URL
默认控制器:welcome(我把它留给了这个测试)
我很乐意有一个简单的例子来做到这一点。我又试过了,但没有运气。这是我这次尝试的内容:
Controller(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(Ajax)
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 7.点击span时出现错误 - POST http://localhost/test/localhost/test/welcome/increase 404 (Not Found)
答案 0 :(得分:1)
如果您在config.php中启用了CSRF,则必须从Cookie提交CSRF令牌,否则请求将无效。
您可以使用此plugin在javascript中检索Cookie。 并简单地将其传递给CI。
ci_token
和
ci_cookie
键可能不同,可以找到 在config.php中
我还建议为请求设置路由并使用
SITE_URL()
结束
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,
});
答案 1 :(得分:0)
使用codeigniter的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);
}
});
}
但是,在localhost前添加http://
应该可以正常工作
url: 'http://localhost/test/welcome/increase',
但总是更好,如果您在CI中调用控制器,建议使用site_url()
...这样,当您将其上传到实时服务器时,这不会给您带来错误。
答案 2 :(得分:0)
在你的ajax中,不要使用外部链接为你的JS使用内部。
确保在config.php中设置$ config ['base_url'] = http://localhost/test/
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);
}
});
}
答案 3 :(得分: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>
答案 4 :(得分:0)
首先您应该在application / config文件中定义您的站点base_url,然后将此base_url与您的呼叫所在的ajax页面调用一起使用。
假设您的base_url
http://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++;
}
答案 5 :(得分: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);
}
});
}
答案 6 :(得分:0)
如果你在.php文件中使用这个ajax,你应该对你的网址做这样的事情:
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文件中执行此操作,则需要在头标记中添加此行
<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;
答案 7 :(得分:-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;
}
}