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

时间:2015-07-31 15:41:18

标签: 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', 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( files );了。 我试过了var formData = $( files ).serialize();。 我试过了var formData = $( files ).serializeArray();。 我尝试过发送方法:' POST&#39 ;; 我尝试过发送方法:' 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);
}

显然,我试图在JSON标头之前回显POST(甚至是GET)数据,但那没关系。无论我使用什么,似乎都不是任何数据(无论数据是否与CI控制器功能相关,无论我在Ajax和控制器中使用POST还是GET方法)。

URI为:console/read_pictures_table

1 个答案:

答案 0 :(得分:1)

您不是在数据中发送键/值对...只是一个字符串化数组的值。没有键分配$ _POST将为空

实际上没有必要对数组进行字符串化。 jQuery将在内部转换为表单编码数组

尝试

$.ajax({
    method: "POST",
    url: url,
    data : {files: files},
    dataType: "json"
})......

然后在控制器中:

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