【问题标题】:codeigniter csrf not work in select optioncodeigniter csrf 在选择选项中不起作用
【发布时间】:2016-04-21 18:49:54
【问题描述】:

I want to make step input with select option, in this case, i make 3 step, when select first option then will show next option 2, then option 3. i am using ajax and i set $config['csrf_protection' ] = 真;在 Codeigniter 配置文件中。在第一个选择选项(#kategori)中有效并在第二个选择选项中显示下一个值,但在第 3 步中选择选项(#sub1 或 javascript 的 secon 函数)不起作用。之前谢谢。

这是我的看法:

<?php echo form_open_multipart('',array('class'=>'form-horizontal'));?>
<?php echo form_label('Kategori','id_kategori',array('class'=>'col-sm-2 control-label'));?>
 <select id="kategori" name="id_kategori">
  <option value=""></option>
    <?php
     foreach($kategori as $kategori_umum)
      {
       echo '<option value='.$kategori_umum->id.'>'.$kategori_umum->nama_kategori.'</option>';
      }
    ?>
 </select>
 <select id="sub1" name="id_kategori_sub1"> //step 2
    <option value=""></option>
 </select>
 <select id="sub2" name="id_kategori_sub2"> //step 3
    <option value=""></option>
 </select>

阿贾克斯:

<script type="text/javascript">
$('#kategori').change(function(){
var kategori_id = $('#kategori').val();
    //alert(state_id);
if (kategori_id != ""){
    var post_url = "<?php echo base_url();?>masuk/produk/get_sub1";
    $.ajax({
        type: "POST",
        url: post_url,
        data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>','kategori_id':kategori_id},
        dataType: 'json',
        success: function(kategori_sub1, dataType) //calling the response json array 'kategori_sub1'
        {
            $('#sub1').empty();
            $('#sub1').show();
            $.each(kategori_sub1,function(id,sub1) 
            {
                var opt = $('<option />'); // creating a new select option for each group
                opt.val(id);
                opt.text(sub1);
                $('#sub1').append(opt);
                $('#sub2').hide();

            });
        },
        error:function(xhr)
            {
                alert("Terjadi Kesalahan");
            }
     }); //end AJAX
} else {
    $('#sub1').empty();
    $('#sub2').empty();
}});

$('#sub1').mouseout(function(){
var sub1_id = $('#sub1').val();
if (sub1_id != ""){
    var post_url = "<?php echo base_url();?>masuk/produk/get_sub2";
    $.ajax({
        type: "POST",
        url: post_url,
        data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>','sub1_id':sub1_id},
        dataType: 'json',
        success: function(kategori_sub2, dataType)
        {
            $('#sub2').empty();
            $('#sub2').show();
            $.each(kategori_sub2,function(id,sub2) 
            {
                var opt = $('<option />');
                opt.val(id);
                opt.text(sub2);
                $('#sub2').append(opt); 
            });
        },
        error:function(xhr)
            {
                alert("Kesalahan");
            }
     }); //end AJAX
}});</script>

【问题讨论】:

  • 检查浏览器开发工具网络中的实际请求。什么是状态?什么会被退回?需要缩小问题所在。也使用mouseout 没有意义...应该使用change
  • 我试过了,但它是一样的,当我设置 $config['csrf_protection'] = FALSE;是工作。对不起,我的英语不好。
  • 那么你可能每次都需要一个新的 csrf 令牌。将所有数据作为 json...set 返回并包含用于下一个请求的令牌
  • 我也估计了,但我不知道该怎么做。我在浏览器中检查,错误是 403 禁止。

标签: javascript php ajax codeigniter csrf


【解决方案1】:

我怀疑你的问题是使用了错误的事件mouseout。

您应该使用change,就像第一个有效的方法一样。

除了需要通过在浏览器开发工具中检查来获得更多关于实际请求的信息

【讨论】:

  • 嘿..那很容易
  • $config['csrf_regenerate'] = FALSE;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2020-10-31
  • 2013-02-18
  • 2013-08-08
相关资源
最近更新 更多