0

我正在尝试使用 jQuery 可排序,然后将更改保存到数据库中,但是在我更新数据库之前,我发生了一些我无法理解的奇怪事情。如果我将序列化数据记录到控制台,我会得到“列表”中的所有项目,但是如果我从 php 脚本中回显出 json 编码的数组,我只会得到一个项目——confused.com。

目前的jquery是:

$('#sortable-list').sortable({
    //handle : '.handle',
    update : function () {
        var order = $(this).sortable('serialize');
        var table = $(this).parent().attr('id');
        console.log(order);
        $.ajax ({
            type: "POST",
            url: templateDir + "/inc/changeSortOrder.php",
            data: "order=" + order + "&sort=1&sort_table=" + table,
            dataType: "json",
            cache: false,
            success: function(data)
            {
                console.log(data);
            }
        });
    }
});

目前的PHP是:

if (isset($_POST['sort']) && $_POST['sort'] == 1) {

if ($_POST['sort_table'] == 'nationalities') {
    $output = array();
    $list = parse_str($_POST['order'], $output);
    echo json_encode($output);
}

控制台日志给了我:

nationality[]=17&nationality[]=1&nationality[]=47&nationality[]=23&nationality[]=3&nationality[]=4&nationality[]=5&nationality[]=6&nationality[]=7&nationality[]=8&nationality[]=12&nationality[]=10&nationality[]=11&nationality[]=13&nationality[]=14&nationality[]=15&nationality[]=16&nationality[]=18&nationality[]=19&nationality[]=20&nationality[]=21&nationality[]=22&nationality[]=24&nationality[]=25&nationality[]=26&nationality[]=27 etc

echo json 给了我:

Object {nationality: Array[1]}
nationality: Array[1]
0: "17"
length: 1

所以由于某种原因,完整的数组没有被传递给 PHP 文件,我不知道为什么。

4

1 回答 1

2

您的问题是您试图将序列化数组分配给单个查询字符串参数,这将产生不正确的查询字符串。尝试传递插件serialize方法返回的序列化列表,如下所示:

$.ajax ({
    type: "POST",
    url: templateDir + "/inc/changeSortOrder.php",
    data: order + "&sort=1&sort_table=" + table,
    dataType: "json",
    cache: false,
    success: function(data)
    {
        console.log(data);
    }
});

然后在 php 中访问传递的列表:

$list = $_POST['nationality'];
于 2013-09-10T16:20:51.013 回答