1

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

看法

    <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>

控制器

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

这是正确的吗 ?它显示错误消息“为 foreach() 提供的参数无效”。我只想从 javascript 中捕获数组,然后将值发送回 VIEW。请帮助我。

4

3 回答 3

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>

此外,您不应该对基本 URL 进行硬编码,而是希望动态地执行此操作,因为如果您移动站点并且基本 URL 发生更改会发生什么情况。

于 2013-07-05T13:24:25.440 回答
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

希望有意义

于 2013-07-05T10:28:55.860 回答
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);
}
于 2013-07-05T13:36:08.500 回答