我遇到将数组从视图传递到控制器的问题。在这种情况下:
查看
<script type="text/javascript">
function displayDet(kode,rowNo,rows){
var jsarr = new Array();
jsarr = {'kode': kode,'rowno':rowNo,'rows':rows};
//alert(jsarr['kode']+jsarr['rowno']+jsarr['rows']);
window.location.href='http://localhost/ci_hiandgirls/index.php/sales/sales/form_so_arr/'+jsarr;
}
</script>
CONTROLLER
public function form_so_arr( $params = array() ){
foreach($params as $val){
$view['detRows'] = $val['rows'];
$view['kode'] = $val['kode'];
$view['rowNo'] = $val['rowNo'];
}
$this->load->view('sales/form',$view);
}
这是对的吗?它显示错误消息&#34;为foreach()&#34;提供的参数无效。我只想从javascript中捕获数组,然后将值发送回VIEW。请帮助我。
答案 0 :(得分:1)
这似乎是不好的做法。但是,如果你想这样做,将参数作为不同的url段传递,如
<script type="text/javascript">
function displayDet(kode,rowNo,rows){
window.location.href='http://localhost/ci_hiandgirls/index.php/sales/sales/form_so_arr/'+kode+'/'+rowNo+'/'+rows;
}
</script>
此外,您不应该对基本网址进行硬编码,而是希望动态执行此操作,因为如果移动网站并更改基本网址会发生什么情况。
答案 1 :(得分:0)
在url CI中发送数组是一种不好的做法,提供uri segment
传递并从url获取参数,你也可以这样做
<script type="text/javascript">
function displayDet(kode,rowNo,rows){
window.location.href='http://localhost/ci_hiandgirls/index.php/sales/sales/form_so_arr/'+kode+'/'+rowNo+'/'+rows;
}
</script>
现在在您的控制器中,您可以将这些参数作为
public function form_so_arr(){
$view['detRows'] = $this->uri->segment(6);
$view['kode'] = $this->uri->segment(4);
$view['rowNo'] = $this->uri->segment(5);
$this->load->view('sales/form',$view);
}
您应该阅读Uri Segment Working
以下是uri细分的概述,了解它的工作原理
http://example.com/index.php/news/local/metro/crime_is_up
The segment numbers would be this:
uri segment (1) =>news
uri segment (2) =>local
uri segment (3) =>metro
uri segment (4) =>crime_is_up
希望它有意义
答案 2 :(得分:0)
你不能不应该传递这样的数组。您应该使用GET / POST,而不是URI段。
注意:您可能需要编辑CodeIgniter配置文件以启用GET。
public function form_so_arr(){
$params = $this->input->get('params');
foreach($params as $val){
$view['detRows'] = $val['rows'];
$view['kode'] = $val['kode'];
$view['rowNo'] = $val['rowNo'];
}
$this->load->view('sales/form',$view);
}
然后在你的JavaScript中:
// From http://stackoverflow.com/a/1714899
function serialize(obj, prefix) {
var str = [];
for(var p in obj) {
var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
str.push(typeof v == "object" ?
serialize(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v));
}
return str.join("&");
}
function displayDet(kode,rowNo,rows){
var jsarr = {'kode': kode,'rowno':rowNo,'rows':rows};
window.location.href='http://localhost/ci_hiandgirls/index.php/sales/sales/form_so_arr?'+serialize(jsarr,'params');
}
如果你不能使用上面的方法,你仍然可以在URI段中传递数组,就像JSON字符串一样。
function displayDet(kode,rowNo,rows){
var jsarr = {'kode': kode,'rowno':rowNo,'rows':rows};
window.location.href='http://localhost/ci_hiandgirls/index.php/sales/sales/form_so_arr/'+encodeURIComponent(JSON.stringify(jsarr));
}
然后在PHP中:
public function form_so_arr($params='[]'){
$params = json_decode(urldecode($params), TRUE);
foreach($params as $val){
$view['detRows'] = $val['rows'];
$view['kode'] = $val['kode'];
$view['rowNo'] = $val['rowNo'];
}
$this->load->view('sales/form',$view);
}