Ajax调用不传递任何POST值

时间:2012-09-27 15:47:43

标签: php jquery mysql ajax

我有一个包含可排序行的表。该表是从一个mysql数据库生成的,该数据库有一个名为“displayorder”的字段,可以输出表格。当用户拖放行时,我想使用AJAX在用户删除行时将这些更改提交给数据库。

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

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

我有这个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);
    }
}

5 个答案:

答案 0 :(得分:1)

您只需重写生成POST数据的js代码即可。

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

休息应该在PHP中工作。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

如果对象查看json_decode函数。 如果它是一个数组,在数据开始之前序列化数据,然后在php端unserialize

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

order是一个数组。在您的ajax脚本中将order转换为query string

data: order.join('&'),