将数组javascript传递给控制器​​codeigniter

时间:2013-07-05 09:19:20

标签: javascript codeigniter

我遇到将数组从视图传递到控制器的问题。在这种情况下:

查看

    <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。请帮助我。

3 个答案:

答案 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);
}