将数组数组从 Ajax 传递给控制器

Posted

技术标签:

【中文标题】将数组数组从 Ajax 传递给控制器【英文标题】:Passing Array of arrays to controller from Ajax 【发布时间】:2015-09-18 02:27:55 【问题描述】:

我有一些问题。首先,我想将我的数据存储到数组集合中。然后将数据传递给控制器​​提交。这是我的代码

Ajax.php

$("#submit").click(function() 
    var total = 3;
    var photos = new Array();

    for(var i = 0; i < total; i++)
    
     photos[i] = $('#thumbnail'+i+'').children('img').attr('src');
     var collection = 
        'no' : i,
        'photo' : photos[i]
     ;

    

    $.ajax( 
        type: "POST",
        url: "<?php echo base_url()?>create/submit",
        data: collection : collection,
        cache: false,
        success: function(response)
        
           console.log(response);
           alert('success');
           window.location = '<?php echo base_url()?>create/submit';

        
    );

); 

[编辑]

控制器

function submit()

      $collection = $this->input->post('collection');

      print_r($collection);

      if(is_array($collection)) 
          foreach ($collection as $collect) 
           echo $collect['no'];
           echo $collect['photo'];
          
       
       else
       
           echo 'collection is not array!';
       

结果

collection is not array!

基于 PeterKa 解决方案,我在控制台中得到了这个 在控制台中

Array
(
[0] => Array
    (
        [no] => 0
        [photo] => https://scontent.cdninstagram.com/hphotos-xap1/t51.2885-15/s320x320/e15/11176494_1106697872689927_2104362222_n.jpg
    )

[1] => Array
    (
        [no] => 1
        [photo] => https://scontent.cdninstagram.com/hphotos-xfa1/t51.2885-15/s320x320/e15/11376044_838742186174876_410162115_n.jpg
    )

[2] => Array
    (
        [no] => 2
        [photo] => https://scontent.cdninstagram.com/hphotos-xaf1/t51.2885-15/s320x320/e15/11381470_878168042272606_1132736221_n.jpg
    )

)

但是,结果在我的控制器中并没有像预期的那样。

【问题讨论】:

【参考方案1】:

您已将thumbnail 添加为所有&lt;a&gt; 的类。 然后像这样更改代码:

$("#submit").click(function () 
        var total = 3;
        var photos = new Array();
        $('.thumbnail').each(function (i) 
            photos.push($(this).attr("src"));
        );
        $.ajax(
            type: "POST",
            url: "<?php echo base_url() ?>create/submit",
            data: 'collection': photos,
            cache: false,
            success: function (response)
            
                console.log(response);
                alert('success');
                window.location = '<?php echo base_url() ?>create/submit';

            
        );

    );

【讨论】:

我不明白你的建议你能解释一下吗? javascript for= jquery`each'【参考方案2】:

collection 变量是循环的本地变量,并不包含您迭代的所有数据。而是尝试这样的事情,虽然你并不真的需要一个对象来停止索引和src——一个普通的一维数组就可以了:

$("#submit").click(function() 
    var total = 3;
    var photos = new Array();
    for(var i = 0; i < total; i++)
    
         var collection = 
            'no' : i,
            'photo' : $('#thumbnail'+i+'').children('img').attr('src')
        ;
        photos.push( collection );
    
    $.ajax( 
        type: "POST",
        url: "<?php echo base_url()?>create/submit",
        data: collection : photos,
        cache: false,
        success: function(response)
        
            console.log(response);
            alert('success');
            window.location = '<?php echo base_url()?>create/submit';
        
    );
); 

您发送的数据格式为:

photos = [
    
        "no": 1,
        "photo":"this is a link"
    , 
    
        "no": 2,
        "photo":"this is a link"
    ,
    
        "no": 3,
        "photo":"this is a link"
    
]

【讨论】:

谢谢彼得卡!我认为它有效。但是我仍然无法从 ajax 获取数据到控制器并显示它(在控制器中)。我该怎么办? 控制器输出中的print_r($collection); 是什么? 试试print_r($_POST); 我现在的问题是结果不如预期。集合不检测为数组 对我来说看起来像是一个有效的数组。你用的是什么版本的PHP?我测试了它here,它作为一个数组传递。如果您使用foreach 处理它会发生什么?

以上是关于将数组数组从 Ajax 传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何从ajax将多个json数组传递给控制器​​?

将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败

如何使用 ajax 传递 from.serialize() 和数组值?

我可以通过 Ajax 将两个数组传递给控制器​​吗? (文件数组和整数数组)

将JSON数组从javascript传递给spring mvc控制器

尝试将数组传递给 ajax 加载函数,但我的控制器没有正确获取数组