【问题标题】:PHP array_push doesn't work with jquery $_REQUEST objectPHP array_push 不适用于 jquery $_REQUEST 对象
【发布时间】:2012-12-16 13:47:02
【问题描述】:

http://maureenmoore.com/momp_112412/112412.html,我正在尝试制作一个被拖入可放置框的 div 数组。请查看查看源代码。

我使用 $.post 将 div 发送到 php 文件 process.php,它会根据我拖动的 div 数量而不是一个组合数组为我提供 1 到 3 个数组。我想使用

将 $_REQUEST 对象(即删除的 div)推送到数组中
$stack = array();
foreach ($_REQUEST as $key => $value) {
            array_push($stack,$value);
          }
print_r($stack);

但它给了我 1 到 3 个数组,每个数组的键为零。如何从例如 3 个拖动的 div 中获取一个数组?

从链接移植的代码:

$(document).ready(function(){
  $( "#draggable1" ).draggable({ grid: [ 20,20 ] });
  $( "#draggable2" ).draggable({ grid: [ 20,20 ] });
  $( "#draggable3" ).draggable({ grid: [ 20,20 ] });     

  $( "#droppable_box" ).droppable({                
     drop: function( event, ui ) {
       var data = $(ui.draggable).attr('id');
       $("#response").append(data);
       $('#myId').click(function(event){
         $.post("process.php",({id : data}),function(data,status){  
          alert("Data: " + data);
         });
       });
      }
   });
});

【问题讨论】:

  • $stack 的键应该从零编号到$_REQUEST 的大小 - 1。

标签: php jquery jquery-ui-droppable array-push


【解决方案1】:

我不完全确定为什么您的代码会在 $stack 中提供相同的键,但您可以将您的代码重写为这个单行代码:

$stack = array_values($_REQUEST);

顺便说一句,制作$_REQUEST 的盲拷贝似乎没那么有用:)

更新

您现在已经添加了 JavaScript;这段代码:

$('#myId').click(function(event){
     $.post("process.php",({id : data}),function(data,status){  
      alert("Data: " + data);
     });
   });

应放在您的 .droppable() 声明之外。

【讨论】:

  • 谢谢,但如果我将它放在可放置声明之外,我根本不会收到任何警报。还有 $stack = array_values($_REQUEST);也没有给我正确的数组。
  • @maureenmoore 好的,我知道为什么,但我只能在大约 10 小时内回复你 :)
【解决方案2】:

您在 drop 函数中绑定 click,如果进行了 3 个 drop,则绑定 3 次,并触发 3 个 ajax 请求等。

它需要更像这样:

$(document).ready(function() {
    var data = [];
    $("#draggable1").draggable({ grid: [20, 20] });
    $("#draggable2").draggable({ grid: [20, 20] });
    $("#draggable3").draggable({ grid: [20, 20] });

    $("#droppable_box").droppable({
        drop: function(event, ui) {
            data.push($(ui.draggable).attr('id'));
            $("#response").append($(ui.draggable).attr('id'));
        }
    });

    $('#myId').click(function(event) {
        $.post("/echo/html/", ({ id: data }), function(return_data, status) {
            alert(data);
        });
    });
});​

在服务器端,您可以通过 $_POST['id']; 获得它

【讨论】:

  • 当我将上面的代码粘贴到我原来的 jquery 上时,我无法再拖动可拖动的 div,但无论如何谢谢。
  • @MaureenMoore - 对我来说似乎工作正常,这是FIDDLE
  • @MaureenMoore - 此外,如果您要在服务器端查找数组,则必须创建要在客户端发送的数组。我编辑了我的答案以反映这一点。
  • 胜出的答案来自 adeneo。您可以在这里查看正确的视图源:maureenmoore.com/momp_112412/121712_1400.html
  • @MaureenMoore - 乐于助人,如果有效,请记住接受答案。
猜你喜欢
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2015-12-01
  • 2014-02-23
相关资源
最近更新 更多