0

我正在尝试使用 AJAX 将数据从 Code Igniter 视图发送到将根据需要处理数据的控制器。我正在使用 JQuery 插件(Handsontable)收集数据,当用户点击“保存”按钮时,它会从表中提取所需的数据并执行 ajax 函数。

$.ajax({
    url: "/survey/save",
    data: {"data": data},
    type: "POST",
});

我可以将它发送到一个常规的 .php 文件,该文件使用 $_POST 而不是我的控制器收集数据。

public function save() {
    $data = $this->input->post('data');

    $myFile = "testFile.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");    

    for ($i = 0, $size = count($data); $i < $size; ++$i) {
        fwrite($fh, $data[$i][0]."\t".$data[$i][1]."\t".$data[$i][2]."\n");
    }
    fclose($fh);
}

上面的代码不是我真正希望控制器做的,但如果能成功执行这段代码,我就能做我想做的事。

我感觉它与 ajax 函数的 URL 有关,但我对所有这些语言都非常陌生,并且可能忽略了一些简单的东西。如果我应该包含任何其他代码,请告诉我!

4

4 回答 4

1

回答我自己的问题,以防它帮助别人。问题是我的 csrf 设置。我意识到关闭 csrf 保护解决了这个问题,但我不想关闭 csrf 保护。我认为 CI 可能已经提出了一个白名单来解决这个问题,但我只是编辑了我的配置文件,如下所示:

if(stripos($_SERVER["REQUEST_URI"],'/survey') === FALSE)
{
    $config['csrf_protection'] = TRUE;
}
else
{
    $config['csrf_protection'] = FALSE;
} 
于 2013-07-18T17:03:26.703 回答
1

嘿,您必须更改ajax urlurl 的格式必须是绝对路径,例如

在您看来,ajax 应该是这样的

$.ajax({
        url:'<?php echo site_url('survey/save'); ?>',
        type: 'post',
        data:  "data="+data,
        beforeSend:function(){
                //before send code for e.g. put a loader
        },
        success:function(result){ 
            // success result code goes here
        },
        error:function(jqXHR, status, error){
            if(status!='error')
                alert(error);   
        }
    });

现在在您的控制器中,您可以获取数据

$data=$this->input->post('data');

还有一件事你在使用时必须使用相对路径fopen,例如

//你用过

$myFile = "testFile.txt";

//instead of that you have to use

$myFile="./YOUR_FOLDER_NAME/YOUR_FILE_NAME";

你可以在你的config.php中设置

$config['base_url'] = '';
于 2013-07-18T05:40:28.590 回答
0

如果您已在 CI Application/Config 文件夹中完成配置文件

$config['base_url'] = 'http://yourwebsite.com/';

那么对于你的网址是

"<?php echo base_url();?>survey/save", 
于 2013-07-17T23:42:47.410 回答
0

尝试此代码的非常简单易行的方法:

首先你必须在 application/confiq.php 或 .htaccess 中设置你的 base_url

你的脚本:

<script type='text/javascript'>
var base_url = '<?=base_url()?>';

function m_ajax()
{
   var ids = $("#all_users").val();

   $.ajax({
      type:"POST",
      url: base_url+"history/home/get_users",
      data: "userid=" + ids,
      success: function(result){
        $("#m_ajax").html(result);
    }
    });

}
</script>

在您的控制器中,您可以将 userid 的值作为 post

 $userid = $this->input->post('userid');

并且可以据此进行其他操作。

于 2013-07-18T03:19:19.487 回答