【问题标题】:Using AJAX to pass javascript array to CodeIgniter controller使用 AJAX 将 javascript 数组传递给 CodeIgniter 控制器
【发布时间】:2015-07-31 15:41:18
【问题描述】:

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

与这个主题的许多问题不同,数组不是源自表单,也不是任何类型的 dom 元素。我希望这个问题与在 SO 上提出的任何其他问题都不相同。这是我的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'; 我试过发送方法:'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)数据,但这没关系。无论我使用什么,似乎都没有任何数据(无论我在 Ajax 和控制器中使用 POST 还是 GET 方法,都没有数据进入 CI 控制器功能)。

URI 是:console/read_pictures_table

【问题讨论】:

  • 您介意发布此请求的路线,以防万一吗?
  • 图片来源是否正确?还是那里存在图像?
  • 你确定 ajax 发送数据吗? ajax 以哪种格式发送数据?
  • @IanGabes,我发布了 uri。不需要第三段。 console/read_pictures_table @bicho:是的,图像文件名很好。我可以提醒他们,他们在文件数组中被正确命名。 @user1048123:不,我不确定 ajax 是否正在发送数据。但现在,感谢@charlietfl,它已修复,并发送数据。谢谢大家。

标签: javascript jquery ajax codeigniter


【解决方案1】:

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

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

试试

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

然后在控制器中:

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

【讨论】:

  • 谢谢@charlietfl。做到了。 Ajax 端的 ``data : {files: files} 和 data: files 和控制器端的 foreach($_POSTforeach($_POST['files'] 之间的区别。我应该已经知道这一点,但没有想清楚。
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
相关资源
最近更新 更多