You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将JavaScript数组传递至CodeIgniter控制器问题求助

解决方案:通过表单提交传递JSON到CodeIgniter(支持页面刷新)

Hola Franco! 看到你遇到的问题了——一开始用AJAX传数据没成功,后来又发现其实需要提交后刷新页面,AJAX反而不适用对吧?咱们一步步来解决:

首先分析你原来AJAX方案的问题

你之前的AJAX代码里,直接把JSON字符串aux作为data传递,但没有给它指定对应的键名,所以CodeIgniter控制器里$this->input->post('aux')根本找不到这个参数~而且AJAX本身是异步无刷新的,和你“提交后刷新页面”的需求冲突,所以咱们换更合适的表单提交方式。

正确的实现方案(表单+隐藏字段)

因为要提交后刷新页面,直接利用表单的默认提交行为,把JSON数据放到隐藏输入框里传递就可以了:

1. 修改视图代码,添加隐藏字段

在form_open之后,添加一个用于存储JSON的隐藏输入框,名字设为aux(和控制器里要获取的键对应):

$id= array('id' => 'x' );
echo form_open("cursos/guardarmalla",$id);
// 添加隐藏字段
echo form_hidden('aux', '');
?>
<div align="center"><?php echo form_submit('','Guardar Malla',"class=\"btn btn-success btn-lg\"");?></div>
<?php echo form_close()?>

2. 调整JS的表单提交事件

去掉AJAX代码,改成在表单提交前把JSON字符串赋值给隐藏字段,然后让表单正常提交(不要阻止默认行为,这样页面就会刷新):

$(document).ready(function(){
 $('#x').submit(function(){
   var aux = JSON.stringify(actualizar);
   // 将JSON字符串存入隐藏字段
   $(this).find('input[name="aux"]').val(aux);
   // 这里不用return false或e.preventDefault(),让表单正常提交刷新页面
 });
})

3. 控制器代码调整(确保能正确接收解析)

你的控制器代码基本没问题,不过可以加上判断,并且处理完数据后跳转或加载视图(因为刷新后通常要回到某个页面):

function guardarmalla(){
 $datos= $this->input->post('aux');
 if($datos){
   $deco=json_decode($datos,true);
   // 这里可以做你需要的业务处理,比如存入数据库
   // 处理完后跳转到目标页面(比如课程列表页)
   redirect('cursos/lista');
   // 如果需要显示结果,也可以加载视图:
   // $data['recibidos'] = $deco;
   // $this->load->view('cursos/resultado', $data);
 } else {
   echo "No se recibieron datos válidos";
 }
}

额外:原来AJAX方案的修复(如果以后需要无刷新场景)

如果之后你又需要无刷新传递数据,只需要把AJAX的data改成键值对形式,给JSON字符串指定键名:

$.ajax({
 type :'POST',
 url: $(this).attr("action"),
 dataType: "json",
 data : { aux: aux } // 把JSON字符串放到aux键下
});

这样控制器就能通过$this->input->post('aux')拿到数据了~

最后提醒一下:确保actualizar全局对象在表单提交时已经正确填充了数据,你可以在submit事件里加console.log(aux)确认内容是否正确哦!

内容的提问来源于stack exchange,提问作者franco.pina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:16:42