0

我有一个具有可排序行的表。该表是从一个 mysql 数据库生成的,该数据库具有一个名为“displayorder”的字段,用于对表进行排序。当用户拖放行时,我想在用户删除行时使用 AJAX 将这些更改提交到数据库。

目前,我可以看到来自 AJAX 调用成功部分的 console.log() 输出,当我在那里输出数据(顺序)时,它看起来很棒,如下所示: ["order_1=1", "order_2=2", "order_4=3", "order_3=4"]

但是根据 Firebug 的说法,在 $_POST 中传递的所有内容都是“未声明的”。如何从我的 indexpage_order.php 文件中访问该 order 变量?

我有这个 jquery 代码:

    <script>
    $(document).ready(function() {
        var fixHelper = function(e, tr) {
            var $originals = tr.children();
            var $helper = tr.clone();
            $helper.children().each(function(index)
            {
              $(this).width($originals.eq(index).width())
            });
            return $helper;
        };
        var sortable = $("#sort tbody").sortable({
        helper: fixHelper,
        stop: function(event, ui) {
            //create an array with the new order
            order = $(this).find('input').map(function(index, obj) {
                var input = $(obj);
                input.val(index + 1);
                return input.attr('id') + '=' + (index + 1);
            });
            $.ajax({
                    type: 'POST',
                    url: 'indexpage_order.php',
                    data: order,
                error: function() {
                    console.log("Theres an error with AJAX");
                },
                success: function(order) {
                    console.log("Saved.");
                    console.log(order);
                }
            });
            return false;
        }
        });
    });
    </script>

indexpage_order.php 包含:

if(isset($_POST) ) {

    while ( list($key, $value) = each($_POST) ) {
        $id = trim($key,'order_'); //trim off order_
        $sqlCommand = 
            "UPDATE indexpage 
             SET displayorder = '".$value."' 
             WHERE id = '".$id."'";
        $query = mysqli_query($myConnection,$sqlCommand) or die (mysqli_error($myConnection));
        $row = mysqli_fetch_array($query);
    }
}
4

5 回答 5

1

您可以简单地重写为 POST 生成数据的 js 代码。

order = {}
$(this).find('input').map(function(index, obj)
  { 
    return order[this.id] = index;
  }
)

休息应该在 PHP 中工作。

于 2012-09-27T16:08:40.890 回答
0

看起来您在 JavaScript 数组中发送订单

当它到达你的 PHP 时,它是不可读的。

如果它是一个对象,请查看json_decode函数。如果它是一个数组,则在数据传输之前对其进行序列化,然后在 php 端进行反序列化。

PHP 无法理解 JavaScript 数组或对象,除非它们被正确编码/序列化。

于 2012-09-27T16:01:13.307 回答
0

order是一个数组。在你的 ajax 脚本order中像这样转换,query string

data: order.join('&'),

于 2012-09-27T16:08:45.357 回答
0

在 PHP 文件中尝试使用 $_REQUEST 而不是 $_POST 来使用 ajax 的 POST 方法。

于 2012-09-27T15:49:57.947 回答
0

将 js 数组转换order为 json 对象,因为 ajax 数据需要在 json 中使用JSON.stringify. 因此,它需要data:JSON.stringify(order),在 ajax 函数中。

或者,在 ajax 函数中json_encode像这样使用data: <?php echo json_encode(order); ?>,

于 2012-09-27T16:03:38.517 回答