CodeIgniter,Ajax调用没有进入Controller

时间:2013-03-11 08:41:34

标签: php codeigniter jquery codeigniter-2

ci-ajax-csrf-problem上查看解决方案后,我在脚本中添加了以下行,它运行正常。

var post_data = {
    '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
}

插入

$.ajax({
        url: '<?php echo base_url()."ajax/test";?>',
        type:'POST',
        dataType: 'json',
        data: post_data, 

感谢大家的帮助:)。

我是Ajax / Jquery的新手,并且正在从jorge torres关注CodeIgniter的Ajax指南,在我的网站上实现一个简单的ajax调用并遇到问题。

我创建了一个Controller Ajax,这是代码片段。

class Ajax extends CI_Controller {

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

    public function test() {
        $output_string = 'This is a test';  
        echo json_encode($output_string);
    }

    public function test2(){
        $this->load->view('test.php');
    }
}

这是该控制器的视图,它与教程中的视图相同,只是我添加了url helper $ this-&gt; load-&gt; helper('url');在第一行

以下是脚本代码的片段。

#getdata是按钮类型,#result_table是div

$('#getdata').click(function(){
$.ajax({
        url: '<?php echo base_url().'ajax/test';?>',
        type:'POST',
        dataType: 'json',
        success: function(output_string){
                $('#result_table').append(output_string);
            } // End of success function of ajax form
        }); // End of ajax call
});

我可以成功访问 localhost.com/codeigniter/ajax/test2 但是当我点击按钮时,没有任何反应。

我尝试查看页面源信息并且网址正确

$.ajax({
        url: 'http://localhost/codeigniter/ajax/test',
        type:'POST'
        ....

也可以直接访问 localhost / codeigniter / ajax / test 并显示输出消息。

我正在使用CodeIgniter 2.1.3,而我的localhost正在XAMPP 1.7.3上运行

提前谢谢你:)

5 个答案:

答案 0 :(得分:4)

ci-ajax-csrf-problem上查看解决方案后,我在脚本中添加了以下行,它运行正常。

var post_data = {
    '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
}

插入

$.ajax({
        url: '<?php echo base_url()."ajax/test";?>',
        type:'POST',
        dataType: 'json',
        data: post_data, 

感谢大家的帮助:)。

答案 1 :(得分:0)

我认为您的ajax调用存在问题。我应该是这样的:

$(document).ready (function () { 
   $('#getdata').click(function(){
     $.ajax({
        url: '<?php echo base_url()."ajax/test";?>',
        type:'POST',
        dataType: 'json',
        success: function(output_string){
                $('#result_table').append(output_string);
            } // End of success function of ajax form
        }); // End of ajax call
    });
});

如果firebug控制台说不允许你需要的操作,那么它可能是一个CSRF令牌问题,请在codeigniter配置中将其关闭。

在配置文件中添加。

$config['csrf_protection'] = FALSE; 

希望这有帮助:)

答案 2 :(得分:0)

您的.click()事件处理程序是否按预期工作?

$('#getdata').click(function(){
 alert('clicked');
 ........

如果不是,请尝试将jquery代码in $(document).ready(function() { ... });包装为@Sudhir建议:

$(document).ready( function() { 
      $('#getdata').click(function(){
      alert('clicked');
      ........

});

如果是,如果你还不知道,有一个名为firebug的工具来检查你的AJAX请求。 我认为你的AJAX网址没问题。 到目前为止,这是我的答案。希望这也有帮助。

答案 3 :(得分:0)

你的config.php中是否启用了输出压缩(gzip)?如果压缩输出,则在使用echo并返回500服务器错误时将失败。

答案 4 :(得分:0)

你试过吗

$(document).ready (function () { 
   $('#getdata').click(function(){
     $.ajax({
        url: '/ajax/test',
        type:'POST',
        dataType: 'json',
        success: function(output_string){
                $('#result_table').append(output_string);
            } // End of success function of ajax form
        }); // End of ajax call
    });
});

而不是<?php base_url; ?>

您是否已将您的网站网址输入CI配置?