使用AJAX将javascript数组传递给CodeIgniter控制器

使用AJAX将javascript数组传递给CodeIgniter控制器,javascript,jquery,ajax,codeigniter,Javascript,Jquery,Ajax,Codeigniter,我正在创建一个简单的javascript数组变量,并希望使用jQuery Ajax将该数组传递给CI控制器函数 与本主题中的许多问题不同,数组不是源于表单,也不是任何类型的dom元素。我希望这个问题与其他问题不一样。以下是我的js代码: function processImagesList(){ var files = new Array(); var i = 0; $("#thumbs li").each(function() { var source = $('img'

我正在创建一个简单的javascript数组变量,并希望使用jQuery Ajax将该数组传递给CI控制器函数

与本主题中的许多问题不同,数组不是源于表单,也不是任何类型的dom元素。我希望这个问题与其他问题不一样。以下是我的js代码:

function processImagesList(){
  var files = new Array();
  var i = 0;
  $("#thumbs li").each(function() {
     var source = $('img', this).attr('src');
     var f = source.split("/");
     var file = f[f.length - 1];
     files[i] = file;
     i++;    
  });
  if(files.length > 0){
    url = "/ajax/add_images_to_asset/";
    var formData = JSON.stringify( files );
    $.ajax({
        method: "POST",
        url: url,
        data : formData,
        dataType: "json"
    }).done(function( data ) {
        $.each(data,function(k,v){ alert(k + " = " + v); });
    }).fail(function(jqXHR, textStatus){
        alert( "Error: " + jqXHR.status + " , " + jqXHR.responseText );
    });
  }
}
这基本上读取li项中img标记的src,并解析src字符串以去掉图像的相对url,然后导出图像的纯文件名

接下来,我将文件名存储在一个名为“files”的数组中

接下来,我想使用Ajax将这个数组传递给我的CI控制器

我尝试了
var formData=JSON.stringify(文件)。
我尝试了
var formData=$(文件).serialize()。
我尝试了
var formData=$(files.serializeArray()。
我试着用“POST”方法发送;
我试着用方法发送:“GET”

这是我的控制器代码:

public function add_images_to_asset()
{
    $data = array();
    foreach($_POST as $k=>$v){
        //$data["$k"] = $v;
        echo $k . " = " . $v . "<br>";
    }
    header('Content-Type: application/json');
    echo json_encode($data);
}
public函数将图片添加到资源()
{
$data=array();
foreach($\发布为$k=>$v){
//$data[“$k”]=$v;
回声$k.“=”$v.“
”; } 标题('Content-Type:application/json'); echo json_编码($data); }
显然,我试图在JSON头之前回显POST(甚至获取)数据,但这没关系。无论我使用什么,似乎都没有任何数据(无论我在Ajax&controller中使用POST还是GET方法,都没有数据进入CI控制器函数)


URI是:
console/read\u pictures\u table

您没有在数据中发送键/值对。。。仅字符串化数组的值。如果未分配密钥,$\u POST将为空

实际上也没有必要严格限制数组。jQuery将在内部转换为表单编码数组

试一试

然后在控制器中:

$files = $this->input->post('files');
// OR
$files = $_POST['files'];

为了以防万一,你介意发布这个请求的路线吗?图像的来源是正确的?或者存在图像?您确定ajax正在发送数据吗?ajax以哪种格式发送数据?@IanGabes,我发布了uri。不需要第三段
console/read\u pictures\u table
@bicho:是的,图像文件名很好。我可以提醒他们,他们在文件数组中的名称是正确的@user1048123:不,我不确定ajax是否正在发送数据。但是现在,多亏了@charlietfl,它被修复了,并发送了数据。谢谢大家。谢谢@charlietfl。成功了。Ajax端的``data:{files:files}和
data:files
,以及控制器端的
foreach($\u POST
foreach($\u POST['files']]
)之间的区别。我应该已经知道了这一点,但我没有想清楚。
$files = $this->input->post('files');
// OR
$files = $_POST['files'];