不能为foreach语句提供正确的参数


Not able to supply right argument to foreach statement

你好,我有2个html表。我使用jquery UI来改变表的位置,并通过ajax传递这个jquery事件参数,同时获取表位置的索引和项目id,以便我可以在数据库中更新表的当前位置。一切正常,我可以传递参数了。我所犯的唯一错误是我不能在foreach语句中正确地使用这个参数。它在foreach语句中生成错误,为foreach()提供了无效参数。这是我的小提琴:demo。我想传递数组,但我在ajax传递字符串。却无法做到这一点。我得到这样的,当我尝试print_r($_POST): Array ([aktion] => show-widget [widget] => 1 [item] => Fahrzeuge)这是我的代码:dashboard.js

$("#widget_update").sortable({      
      update : function(event, ui) {
          var widget = $('#widget_update').sortable('serialize');
        $.ajax({
        type: "POST",
        url: "ajax/dashboard.php",
        dataType : 'json',
        cache: false,
        data: {'aktion' : 'show-widget','widget':ui.item.index(),'item':ui.item[0].id},
        success: function(data){
            $('#widget').html(data.html);                           
        },
        error: function(data){
            alert('Error');         
        }
        });
      }
}); 

dashboard.php

foreach ($_GET['item'] as $position => $item) :
$sql="Update dashboard_widget_users inner join dashboard_widget on dashboard_widget_users.dsnr_dashboard_widget=dashboard_widget.ID
set dashboard_widget_users.position=".$position." 
where dashboard_widget.name='".$item."' and dashboard_widget_users.dsnr_yw_user=10";
      $sql_update=mysql_query($sql);      
      endforeach;

您将ui.item[0].id传递给item属性以获取data。我认为它正在传递string而不是array,这将用于您的foreach

尝试通过ui.item

希望对你有帮助。

回答2:

因为你已经知道positionid,你可以循环它们并在传递给data属性之前将数据存储在object中。下面的代码可以指导你:

$("#widget_update").sortable({      
    update : function(event, ui) {
        var widget = $('#widget_update').sortable('serialize'),
            items = [];
        for (var i in ui.item) {
            item = item[i];
            items.push({
                position: i,
                id: item.id
            })
        }
        $.ajax({
            type: "POST",
            url: "ajax/dashboard.php",
            dataType : 'json',
            cache: false,
            data: {
                'aktion': 'show-widget',
                'widget': ui.item.index(), // I'm not sure what is this for
                'item': items
            },
            success: function(data){
                $('#widget').html(data.html);                           
            },
            error: function(data){
                alert('Error');         
            }
        });
    }
});

**在PHP中

// print_r($_POST);
foreach ($_POST["item"] as $value) {
    // print_r($value);
    $id = $value["id"];
    $position = $value["position"];
}

这些代码没有经过测试,但是你可以看到里面发生了什么