【问题标题】:Post js array to php @jquery @codeigniter将 js 数组发布到 php @jquery @codeigniter
【发布时间】:2011-03-22 04:04:11
【问题描述】:

我正在尝试使用 ajax post 方法将 javascript 数组传递给 php 控制器(我正在使用 codeigniter)。数据似乎已发送,但 $_POST['data'] 未知。这是代码:

JAVASCRIPT:

function update_order(){
var ordre_column1 = $('#column1').sortable('toArray');
var data = serialize(ordre_column1);

$.post('../../controlleur_groupe_admin/ordre_box',data);
}

我的控制器:

function ordre_box() {
    $data = $this->input->post('data')
    $array = unserialize($data);
    print_r($array);
}

我在 firebug 中没有返回,我想知道内容类型是否错误:

Content-Type application/x-www-form-urlencoded; charset=UTF-8

谢谢。

为了简化代码:

Javascript:

function update_order(){
var ordre_column1 = $('#column1').sortable('toArray');
var data = ordre_column1.toString();

$.post('../../controlleur_groupe_admin/ordre_box',data);
}

控制器:

function ordre_box() {
    echo $_POST['data'];
}

萤火虫说:

消息:未定义的索引:$data

但帖子存在:Paramètresapplication/x-www-form-urlencoded 131,126,125,156,154 资源 131,126,125,156,154

【问题讨论】:

  • 你知道你的 php 代码实际上被调用了吗?您的网址可能无法正常工作

标签: javascript jquery ajax codeigniter post


【解决方案1】:

你怎么知道key是'data',不就是你传入的序列化字符串吗?

例如,如果你有一个这样的数组:

$array['value'] = 'hey!';

您将其序列化并将其发送到控制器,您将像这样检索该值:

$this->input->post('value');

不是这样,我认为你正在尝试这样做,但我可能错了:

$array = $this->input->post('data');
echo $array['value'];

要修复它,您可以将 js 数组放入另一个数组,其中包含一个名为 data 的键,然后对其进行序列化..

【讨论】:

  • 事实上$('#column1').sortable('toArray')返回一个包含在#column1中的所有盒子id的列表,我有那个数组:array[0] = first id array[1] = second id ...等等我需要检索 php 数组中的所有值。我不确定你说的是什么(我的英语)。
  • 序列化,在 jquery 上下文中,用于表单元素。在这种情况下,表单元素的名称将是键。如果您没有任何密钥,则以后无法检索数据。我现在看到您更改了序列化并改为使用“toString”。这是错误的,它将布尔类型的变量转换为字符串类型的变量。这不是你想要的。我认为您需要这样的东西,但我不知道您是否会理解:bit.ly/UAbHy 我希望我能更好地解释这一点,也许其他人可以。
  • 我已经关注了这个话题,这似乎是解决我问题的最佳方法。但我有点懒,所以我尝试了更简单的事情......事实上我不应该;)。谢谢,找到后我会发布解决方案。
【解决方案2】:

好的,我找到了解决方案!这是代码(带有 jquery.json-2.2.min.js ):

Javascript:

function update_order(){
var items=[];    // This common array will get all info for each item.
var ordre_column1 = $('#column1').sortable('toArray');
for (var i in ordre_column1){    //create an array for a single item
var item ={id: ordre_column1[i],
           column_id: 1,
           sort_no: i
};
items.push(item);   // put the single item array in common array
}
var ordre1={ items: items };

$.post('../../controlleur_groupe_admin/ordre_box','data='+$.toJSON(ordre1));  //post the data to JSON format
}

数据以 JSON 格式发送到控制器。

控制器:

function ordre_box() {
    $data = $_POST['data'];
    $json = str_replace('\\','',$data); //we replace all backslashes with nothing, which results in a correct json_decode string
    $newdata = json_decode($json);  // decode JSON format to php array
    foreach($newdata->items as $item){  // Now i can use the data
        echo " objet :";
        echo $item->id;
        echo ",";
        echo $item->column_id;
        echo ",";
        echo $item->sort_no;
    }
}

感谢 Calle 让我走上正轨。

【讨论】:

    【解决方案3】:

    你的serialize 函数是做什么的?如果它没有将该数组移动为字符串格式,您可能不会在控制器中看到任何内容。

    【讨论】:

    • 我真的不知道序列化做什么,我只阅读了反序列化会将我的数组转换为 php 数组的提示。这是文档:php.net/manual/en/function.serialize.php。但在使用它之前,我的代码是这样的,我有同样的问题: function update_order(){ var ordre_column1 = $('#column1').sortable('toArray'); var data = ordre_column1.tostring() $.post('../../controlleur_groupe_admin/ordre_box',data); } 然后我用 explode 来制作一个数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2016-01-13
    • 2017-02-05
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多