【问题标题】:Not able to supply right argument to foreach statement无法为 foreach 语句提供正确的论点
【发布时间】:2014-07-04 07:02:14
【问题描述】:

您好,我有 2 个 html 表格。我正在使用 jquery UI 来更改表的位置,并通过 ajax 传递这个 jquery 事件参数,同时获取表位置的索引和项目 ID,以便我可以在数据库中更新表的当前位置。一切运行良好,我可以传递参数。我犯的唯一错误是我无法在 foreach 语句中正确接受这个论点。它在 foreach 语句中生成错误,为 foreach() 提供的参数无效。这是我的小提琴:demo。我想传递数组,但我在 ajax 中传递字符串。但不能这样做。当我尝试 print_r($_POST): Array ( [aktion] => show-widget [widget] => 1 [item] => Fahrzeuge ) 这是我的代码: 仪表盘.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;

【问题讨论】:

  • 您传递给foreach 的值必须是一个数组
  • 您正在通过 post 发送数据并通过 get 接收 ;-)
  • 在 firbug 中我可以看到参数为: aktion show-widget widget 0 item NEWS 当我尝试改变表格的位置时。
  • 对。而NEWS 似乎是一个字符串,而不是一个数组。不确定您要通过字符串上的foreach 循环来完成什么。
  • 对不起,我现在把它改成 Post ;)

标签: javascript php ajax jquery-ui foreach


【解决方案1】:

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

尝试通过ui.item

希望对您有所帮助。

答案 2:

由于您已经知道positionid,您可以循环它们并将数据存储在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"];
}

这些代码未经测试,但您可以看到其中发生了什么。

【讨论】:

  • 我想传递数组,我试图做出你说的改变,但现在它给出了一个错误..
  • 尝试print_r($_POST)var_dump($_POST) 并在此处粘贴您获得的内容。您可以通过检查元素查看转储的数据 -> 网络(提交后单击 url)然后导航到预览或响应选项卡
  • 当我尝试 print_r($_POST): Array ( [aktion] => show-widget [widget] => 1 [item] => Fahrzeuge ) 我可以简单地使用$_POST 用于获取 php 变量并更新它,但我认为对于数组我必须使用 foreach 所以我总是可以获取更新的位置并存储在数据库中
  • print_r 是否使用了我的回答(通过ui.item)?
  • 嗨,我如何获取小部件及其位置的数组?现在我正在接受我是 changinf 的 wdiget 数组和他们的位置 ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
相关资源
最近更新 更多