2015-11-16 68 views
-2

我只是想問一下,如何從列表順序中的所有id值和數據速率值合併這兩個數組? ul裏面太多了,所以我需要把它們全部存入數組中。如何從數據屬性和id使用javascript添加數組並將它們結合在數組php中?

這是我在javascript代碼:

   var h = []; 

       $("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); }); 

       var x = []; 

       $("ul.reorder-photos-list li").each(function() { x.push($(this).attr('data-rate').substr(9)); }); 


       $.ajax({ 
        type: "POST", 
        url: "order_update.php", 
        data: { 
         ids: " " + h + "", 
         rate: " " + x + "" 
         }, 
        success: function(html) 
        { 
         window.location.reload(); 
         /*$("#reorder-helper").html("Reorder Completed - Image reorder have been successfully completed. Please reload the page for testing the reorder.").removeClass('light_box').addClass('notice notice_success'); 
         $('.reorder_link').html('reorder photos'); 
         $('.reorder_link').attr("id","");*/ 
        } 
       }); 

,這是我的html代碼:

<li id="image_li_<?php echo $row['id']; ?>" class="ui-sortable-handle"> 
<input id="rate" type="text" value="<?= $row['rate']?>" data-rate="<?php echo $row['rate']; ?>" > 

,然後在我的order_update.php這是我的代碼。

$idArray = explode(",",$_POST['ids']); 
$rateArray = explode(",",$_POST['rate']); 

$ids = array(); 
foreach ($idArray as $id) { 
    $ids[] = $id; 
} 

$rates = array(); 
foreach ($rateArray as $rate) { 
    $rates[] = $rate; 
} 

$n = 0; 
$orderArray = array(); 
while($n <= count($idArray)) 
{ 
    $orderArray[] = array("id" => $ids[$n], "data" => $rates[$n]); 
    $n++; 
} 

,這是從orderArray

我插入查詢
function updateOrder($orderArray){ 
     $count = 1; 
     foreach ($orderArray as $array){ 
      $update = mysqli_query($this->connect,"UPDATE `test` SET `order` = $count, `rate`=$array[rate] WHERE id = $array[id]"); 
      $count ++; 
     } 
     return true; 
    } 

希望某人幫助我。 :)提前致謝!

+1

請簡化您的代碼。 – Oleander

+0

h是一個不是以逗號分隔的字符串的數組,對吧?與x相同。那麼,ids:「+ h +」,rate:「」+ x +「」'會被打印出來嗎? – developerwjk

+0

實際上,我從逗號分解它,並使其數組。我想結合rateArray到多維數組的id數組中。 @developerwjk – xerwudjohn

回答

1

設置您的數據時,不需要有多個循環。您可以通過數據一次循環:

var dataArray = []; 

$("ul.reorder-photos-list li").each(function() { 
    var el = $(this), 
     input = el.children(':input'); // This gets the input decendent of the li 

    // When adding one item at a time to an array, array[array.length] = item is better 
    dataArray[dataArray.length] = { 
     id: el.attr('id').substr(9), 
     rate: input.val(), 
    }; 
}); 

$.ajax({ 
    type: "POST", 
    url: "order_update.php", 
    data: { items: dataArray }, // items gives the PHP something to use as a key in the POST data 
    success: function(html) {...} 
}); 

你的PHP將是這樣的:

// The data passed from the Ajax call is already an array 
$itemsArray = $_POST['items']; 

// Your function to process the array 
function updateOrder($orderArray) { 
    foreach ($orderArray as $index => $array) { 
     // $index will already have a count, you need to +1 because it's 0-based 
     mysqli_query($this->connect, "UPDATE `test` SET `order` = " . ($index + 1) . ", `rate`=" . $array['rate'] . " WHERE id = " . $array['id']); 
    } 
    return true; 
} 
+0

很抱歉,遲到的回覆,我只是忘記了速度必須在輸入值。呵呵呵。不在同一個html元素中。 ''' 這是正確的嗎? $(「input.reorder-rate」)。each(function(){h.push($(this).attr('value')。substr(9));});' – xerwudjohn

+0

我忘記了如果jQuery自動將JS對象轉換爲字符串,然後再將它們AJAX在其他地方。我通常使用vanilla JavaScript,因爲我主要從事不需要擴展庫的小型項目。這也有助於對基礎語言及其功能有更深入的瞭解。 – CSS

+0

@CSS這個答案是我要找的最接近的答案。這裏只需要改變'rate:el.attr('data-rate')。substr(9)',使其成爲輸入值。任何想法交配? – xerwudjohn

1
var rates; 
$("ul.reorder-photos-list li").each(function() { 
    rates.id.push($(this).attr('id').substr(9)); 
    rates.rate.push($(this).attr('data-rate').substr(9)); 
}); 

這將創建H/X對你的JSON對象。

$.ajax({ 
    type: "POST" 
    , url: "order_update.php" 
    , data: { JSON.stringify(rates); } 
    , success: function(html) { 
     window.location.reload(); 
     /* $("#reorder-helper").html(
     * "Reorder Completed - Image reorder have been successfully completed. 
     * Please reload the page for testing the reorder." 
     *).removeClass('light_box').addClass('notice notice_success'); 
     * $('.reorder_link').html('reorder photos'); 
     * $('.reorder_link').attr("id",""); 
     */ 
    } 
}); 

這應該解決您的呼叫以發送正確的數據。

你的PHP端會想有一些與此類似:

if(isset($_POST['rates'])) { 
    $ratesString = $_POST['rates']; 
    $rates = json_decode($ratesString); 
} 
// Do other things with $hx` 

你插入查詢熄滅了。你需要將每個值聲明爲一個變量,否則你的編譯器也會討厭你的PHP。您的查詢中也有一些不必要的引號。

function updateOrder($orderArray){ 
    $count = 1; 
    foreach ($orderArray as $array){ 
     $rate = $array['rate']; 
     $id = $array['id']; 
     mysqli_query($this->connect,"UPDATE test SET order = $count, rate = '$rate' WHERE id = '$id'"); 
     $count ++; 
    } 
    return true; 
} 

對於你的HTML,我想這是你所追求的,但不能肯定,因爲它不是真正解釋那麼好......隨意對你的意圖發表評論。

<ul> 
<?php foreach($orderArray as $array) : ?> 
<li id="image_li_<?php echo $array['id']; ?>" class="ui-sortable-handle"> 
<input id="rate" type="text" value="<?php echo $array['rate']?>" data-rate="<?php echo $array['rate']; ?>" ></li> 
<?php endforeach; ?> 
</ul> 

希望這會有所幫助。

-C§

+0

嗨夥計我更新了我的代碼。 – xerwudjohn

+0

@xerwudjohn這是否修復了HTML部分?如果沒有,給一些提示= D – CSS

+0

你的代碼太複雜了呵呵。它有點難。大聲笑,但感謝您的幫助。只是想問你有沒有關於如何獲得輸入值的所有值的想法?這是我的代碼'$(「input.data-rate」)。each(function(){x.push($(this).attr('value')。substr(9));});'input類名是數據速率 – xerwudjohn

0

我現在得到了代碼。感謝您的幫助!

   var h = []; 

       $("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); }); 

       var x = []; 

       $("input").each(function() { x.push($(this).val()); }); 

       $.ajax({ 
        type: "POST", 
        url: "order_update.php", 
        data: {ids: " " + h + "",rate: " " + x + ""}, 
        /*data: { items: dataArray },*/ 
        success: function(html) 
        { 
        ... 
        } 

       }); 

在PHP端:

$idArray = explode(",",$_POST['ids']); 
$rateArray = explode(",",$_POST['rate']); 

$ids = array(); 
foreach ($idArray as $id) { 
    $ids[] = $id; 
} 

$rates = array(); 
foreach ($rateArray as $rate) { 
    $rates[] = $rate; 
} 

$n = 0; 
$orderArray = array(); 
while($n <= count($idArray)) 
{ 
    $orderArray[] = array("id" => $ids[$n] , "rate" => $rates[$n]); 
    $n++; 
} 

$db->updateOrder($orderArray); 

function updateOrder($orderArray){ 
     $count = 1; 
     foreach ($orderArray as $array){ 
      mysqli_query($this->connect, "UPDATE `test` SET `morder` = " . $count . ", `mtoursrate`=" . $array['rate'] . " WHERE id = " . $array['id']); 
      $count ++; 
     } 
     return true; 
    } 
相關問題