将数组的数组传递给来自Ajax的控制器。

时间:2022-05-27 02:09:45

I have some problems. First, i want to store my data to array of arrays collection. and then pass data to controller submit. Here is my code

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

Ajax.php

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

        }
    });

}); 

[EDIT]

(编辑)

Controller

控制器

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!';
       }
}

RESULT

结果

collection is not array!

Based on PeterKa solution, i got this in my console in Console

基于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
    )

)

But, Result in my controller didn't as expected.

但是,结果是我的控制器没有达到预期。

2 个解决方案

#1


6  

The collection variable is local to the loop and does not hold all the data you iterate through. Instead try something like this, although you don't really need an object to stop the index and src -- a plain 1D array would do:

集合变量是循环的本地变量,它不包含您要遍历的所有数据。相反,试试这样的方法,尽管你并不需要一个对象来停止索引和src——一个普通的1D数组就可以做到:

$("#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';
        }
    });
}); 

The data you send is in the form:

您发送的数据为:

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

#2


4  

You have add thumbnail as class for all <a>. Then change the code like this :

您已经为所有添加了缩略图作为类。然后更改代码如下:

$("#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';

            }
        });

    });

#1


6  

The collection variable is local to the loop and does not hold all the data you iterate through. Instead try something like this, although you don't really need an object to stop the index and src -- a plain 1D array would do:

集合变量是循环的本地变量,它不包含您要遍历的所有数据。相反,试试这样的方法,尽管你并不需要一个对象来停止索引和src——一个普通的1D数组就可以做到:

$("#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';
        }
    });
}); 

The data you send is in the form:

您发送的数据为:

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

#2


4  

You have add thumbnail as class for all <a>. Then change the code like this :

您已经为所有添加了缩略图作为类。然后更改代码如下:

$("#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';

            }
        });

    });