我正在创建一个简单的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
答案 0 :(得分:1)
您不是在数据中发送键/值对...只是一个字符串化数组的值。没有键分配$ _POST将为空
实际上没有必要对数组进行字符串化。 jQuery将在内部转换为表单编码数组
尝试
$.ajax({
method: "POST",
url: url,
data : {files: files},
dataType: "json"
})......
然后在控制器中:
$files = $this->input->post('files');
// OR
$files = $_POST['files'];