【问题标题】:How to pass javascript array variable through jquery $.window url to codeigniter controller?如何通过 jquery $.window url 将 javascript 数组变量传递给 codeigniter 控制器?
【发布时间】:2013-07-03 08:36:35
【问题描述】:

我有一个学生列表,每个学生都有一个对应的复选框。复选框值包含我需要传递给我的控制器函数的学生 ID。我有一个 javascript 代码,它检测复选框选中的值并将其存储到 javascript 数组变量中。然后将 javascript 数组变量传递给 $.window url,其中的 url 地址指向我的 codeigniter 控制器函数。当您选择第一个学生时,这很好用,它会通过 var_dump 方法显示学生 ID,但是,如果选择了第二个或第三个等学生,它会说您提交的 uri 具有不允许的字符。选中所有复选框时的相同响应。 javascript 数组变量似乎只向我的 codeigniter 控制器函数传递了一个值,该函数仅采用学生列表的第一个值。我如何能够传递第二个、第三个等检查值,甚至通过带有 $.window 的 javascipt url 将 javascript 数组变量传递给 codeigniter 控制器函数。图像和代码如下所示。非常感谢。

仅选择第一个学生列表的图片

单击发送电子邮件按钮后的控制器输出图像

选择第二个学生的图片

单击发送电子邮件按钮后的控制器输出图像

选择所有学生列表的图片

单击发送电子邮件按钮后的控制器输出图像

Javascript:

<script type="text/javascript">

$("#send_email").click(function(){

var cboxes = document.getElementsByName('student_id[]');
var checked_val= [];
var unchecked_val=[];
var len = cboxes.length;
for (var i=0; i<len; i++) {

 (cboxes[i].checked) ? checked_val[i]=cboxes[i].value:unchecked_val[i]=cboxes[i].value;

 }


    $.window({
    title: "Coursebooking",
    url: "<?php echo base_url() ?>student_controller/pop_val/"+checked_val,
 });

 });

</script>

控制器:

function pop_val(){
 $stud_id = $this->uri->segment(3);
 var_dump($stud_id);
}

【问题讨论】:

    标签: javascript jquery codeigniter


    【解决方案1】:

    试试这个,

    var array_val = $('input[name="student_id[]"]:checked').map(function(){
                               return this.value;
                          }).get();
    
    
    
    
     $.window({
         title: "Coursebooking",
         url: "<?php echo base_url() ?>ajax_student_controller/pop_val/" + array_val,
       ........
    

    【讨论】:

    • 只是使用 $.window 而不是 $.ajax,因为我将使用弹出窗口。
    • 是的,上面的代码在选择单个值时有效,在选中单个复选框时应用。感谢您这样做,因为它解决了单独选择复选框时的问题,但是,最关键的部分是当我必须检查多个复选框时。然后上面的代码只返回 uri 错误,说明不允许的字符。
    • 我发现当array_val变量中有多个值时,url看起来像这样:GET localhost/coursebooking/ajax_student_controller/pop_val/338,339400 (Bad Request)会导致uri错误。我将如何解决这个问题?
    • 好的。我知道了。只需在 config.php 文件中添加 ',' $config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
    【解决方案2】:

    localhost/coursebooking/ajax_student_controller/pop_val/338,339 这种url会导致uri disallowed character错误。数字 338 和 339 之间的逗号。要解决这个问题,只需在 $config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-'; 的 config.php 文件中添加逗号字符。然后在控制器函数中使用explode 函数来分隔逗号分隔值。这是输出:

    选中 3 个复选框并在 config.php 文件中添加逗号字符后的 var_dump 输出图像 $config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-,';

    var_dump 输出的图像,用于使用explode 函数将逗号分隔值分隔为数组索引值。

    控制器代码:

    function pop_val(){
    
     $stud_id = $this->uri->segment(3);
     $split_val = explode(',',$stud_id);
     var_dump($split_val);
    
    }
    

    【讨论】:

      【解决方案3】:

      我修改后的 javascript 代码。但是,此更改仅适用于获取正在检查的学生列表的第二个值,与获取正在检查的第三个学生列表的正确值相同。但是同时选中所有复选框会返回一个 uri 错误,提示“您提交的 URI 包含不允许的字符”。

      <script type="text/javascript">
      
      $("#send_email").click(function(){
      
      var cboxes = document.getElementsByName('student_id[]');
      var checked_val= [];
      var unchecked_val=[];
      var array_val=new Array();
      var len = cboxes.length;
      for (var i=0; i<len; i++) {
      
          if(cboxes[i].checked){
             checked_val[i]=cboxes[i].value;
             array_val.push(checked_val[i]);
          }
      }
      
      
          $.window({
          title: "Coursebooking",
          url: "<?php echo base_url() ?>ajax_student_controller/pop_val/" + array_val,
      });
      
      });
      </script>
      

      选择列表中第二个学生的图片

      控制器输出返回正确的值

      选择列表中第三个学生的图片

      控制器输出返回正确的值

      选择列表中所有学生的图片

      Still Controller 输出返回 uri 错误

      【讨论】:

      • 检查 application/config/config.php 中的$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-'; 并添加所需的字符
      • 谢谢。我只需要在配置文件中添加一个逗号即可。
      【解决方案4】:
       url: "<?php echo base_url() ?>student_controller/pop_val/"+checked_val,
      

      试试:

      url: "/student_controller/pop_val/" + checked_val,
      

      【讨论】:

      • 仍然发生同样的事情。
      猜你喜欢
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多