简体   繁体   English

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

[英]Passing Array of arrays to controller from Ajax

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. 但是,我的控制器中的结果没有达到预期的效果。

The collection variable is local to the loop and does not hold all the data you iterate through. collection变量是循环的本地变量,并不包含您迭代的所有数据。 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 - 一个简单的一维数组会做:

$("#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"
    }
]

You have add thumbnail as class for all <a> . 您已为所有<a>添加thumbnail作为类。 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';

            }
        });

    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM