2013-10-24 72 views
0

我正在使用jQuery UI的可排序功能制作一个小的拖放应用程序。 jQuery工作正常,但是当我尝试按顺序对所有行的数组进行编码时,另一侧的PHP脚本将数组读取为NULL,我找不到原因。这里的一切都在以使他们出现在我的第一个脚本:JSON编码数组在PHP中为NULL

的HTML

<form method="post" id="reorder" action="orderupdate.php"> 
    <input type="hidden" id="post_ids" name="post_ids"> 
    <button type="submit">REORDER</button> 
</form> 

<ul id="photo-selector"> 
    <li id="img1"><img src="images/img1.jpg"></li> 
    <li id="img2"><img src="images/img2.jpg"></li> 
    <li id="img3"><img src="images/img3.jpg"></li> 
    <li id="img4"><img src="images/img4.jpg"></li> 
    <li id="img5"><img src="images/img5.jpg"></li> 
    <li id="img6"><img src="images/img6.jpg"></li> 
</ul> 

的JS

$(document).ready(function(){ 

    var formOrder = document.getElementById('reorder'); 
    formOrder.addEventListener('submit', function(){ 
     var post_ids_field= document.getElementById('post_ids'); 
     var ul_id = document.getElementById("photo-selector"); 
     var post_ids = ul_id.getElementsByTagName("li"); 
     post_ids_field.value = JSON.stringify(post_ids); 
     alert("check"); 
    }); 

}); 

当表格点击“重塑”按钮往上顶将其发送到orderupdate.php如下

<?php 

    $post_ids = json_decode($_POST['post_ids']); 
    var_dump($post_ids); 

    require("opendbas3.php"); 

    foreach ($post_ids as $x => $value) { 
     $query = "UPDATE dav_posts SET p_order='$x' WHERE post_id='$value'"; 
     $result = mysql_query($query, $link); 
    } 

?> 

现在当我提交时,它redirec对我的PHP脚本orderupdate.php它不执行查询,我发现foreach循环无法读取$post_ids阵列。我只得到NULL与我的var_dump()。另外,JS脚本中的alert不会在ready()函数或事件侦听器的提交中触发。它只是重定向到PHP脚本。

是不是有什么问题?什么可能是错的?提前致谢。

回答

1

您不能在DOM元素上调用JSON.stringify - 这是警报永不会触发的原因。你会发现它与TypeError: Converting circular structure to JSON崩溃。

你需要做的是什么li阵列映射到字符串数组:

var id_strings = []; 
for (var i=0 ; i<post_ids.length ; i++) { 
    id_strings.push(post_ids[i].getAttribute("id")); 
}; 
post_ids_field.value = JSON.stringify(id_strings); 

Fiddle demo

0

尝试使用

post_ids = $("#photo-selector").sortable("toArray"); 
post_ids_field.value = JSON.stringify(post_ids);