2013-10-24 109 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);