1

查看关于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的 Ajax for CodeIgniter 指南在我的网站上实现一个简单的 ajax 调用并遇到了问题。

我创建了一个控制器 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 帮助器 $this->load->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但是当我单击按钮时,什么也没有发生。

我尝试查看页面源信息,并且 url 是正确的

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

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

我正在使用 CodeIgniter 2.1.3,我的本地主机在 XAMPP 1.7.3 上运行

先感谢您 :)

4

5 回答 5

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, 

谢谢大家的帮助:)

于 2013-03-13T02:01:22.147 回答
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; 

希望这可以帮助 :)

于 2013-03-11T08:55:39.283 回答
0

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

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

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

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

});

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

于 2013-03-11T09:06:38.807 回答
0

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

于 2013-03-11T09:11:01.753 回答
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 配置中输入了您的站点 URL?

于 2013-03-11T09:29:13.503 回答