如何通过window.location.href传递两个变量并在CodeIgniter视图中获取
解决window.location.href传递多变量并在CodeIgniter中获取的问题
我来帮你搞定这个问题!你当前的代码只传递了一个变量v1,还多了个不必要的空格,这大概率就是你出错的原因。下面给你两种实用的方案,分别对应CodeIgniter里常用的两种参数传递方式:
方案1:通过URL路径参数传递(CodeIgniter推荐风格)
这种方式会把变量直接拼在URL的路径里,比如http://你的域名/controller/method/值1/值2,看起来更整洁。
前端JS代码修正:
<script> var v1 = "1"; var v2 = "2"; // 把两个变量作为路径片段拼接,注意不要加多余空格 window.location.href = "<?=base_url('controller/method/')?>" + v1 + "/" + v2; </script>
后端控制器获取参数:
在你对应的控制器方法里,有两种获取方式:
- 直接作为方法形参接收(最简洁):
// 你的控制器文件 class Controller extends CI_Controller { public function method($v1, $v2) { // 直接使用$v1和$v2即可 echo "变量1的值:" . $v1; echo "<br>变量2的值:" . $v2; } }
- 通过URI类获取(适合不想在方法定义里写参数的场景):
public function method() { // segment的数字对应URL的片段位置:controller是第1段,method是第2段,v1是第3段,v2是第4段 $v1 = $this->uri->segment(3); $v2 = $this->uri->segment(4); // 后续逻辑处理 }
方案2:通过GET查询字符串传递
这种方式是传统的URL参数格式,比如http://你的域名/controller/method/?v1=值1&v2=值2,适合需要传递可选参数的场景。
前端JS代码:
注意如果变量包含特殊字符(比如空格、中文、&等),一定要用encodeURIComponent编码,避免URL解析错误:
<script> var v1 = "1"; var v2 = "2"; // 拼接查询字符串,对变量进行编码 window.location.href = "<?=base_url('controller/method/')?>?v1=" + encodeURIComponent(v1) + "&v2=" + encodeURIComponent(v2); </script>
后端控制器获取参数:
使用CodeIgniter的Input类来安全获取GET参数(不推荐直接用$_GET,因为Input类会做安全过滤):
public function method() { $v1 = $this->input->get('v1'); $v2 = $this->input->get('v2'); // 后续逻辑处理 }
注意事项
- 如果变量值包含特殊字符(比如空格、中文、
&、=等),一定要用encodeURIComponent编码,否则会导致URL参数解析混乱。 - 用路径参数的话,要确保你的CodeIgniter路由规则没有限制这些额外的参数(默认路由是支持的,除非你自定义了严格的路由规则)。
内容的提问来源于stack exchange,提问作者mahesh
相关产品推荐
相关产品推荐

