2011-12-23 18 views
0

私は小さなショッピングカートを構築しています。現在、支払いページに進む前に各商品の在庫を確認するチェックアウト機能を実装しようとしています。jsonを使用してjquery配列をPHPに渡します

このwhileループは、「ショッピングカート」テーブルから各列が表示されている:そのwhileループにおいて

while ($row = $result->fetch()) { 
    echo '<table class="cart-row" cellspacing="0" cellpadding="0" width="100%">'; 
    echo '<tbody>'; 
    echo '<tr>'; 
    echo '<td width="75"><img border="0" width="59px" height="78px" title="" alt="" src=' . $row["ImagePath"] .'></td>'; 
    echo '<td width="203"><span class="itemElements itemName">'. $row["Name"] .'</span></td>'; 
    echo '<td width="203"><input type="submit" class="btnMinus linkbtnType2" value="-"><input type="submit" class="btnPlus linkbtnType2" value="+"></td>'; 
    echo '<td width="135"><span class="qtyNum">('. $row["Qty"] .')</span> <br />'; 
    echo '<input type="hidden" name="ProductId" class="ProductId" value='.$row["ProductId"].' />'; 
    echo '<span class="qtyRemoveLink"><input type="submit" class="btnRemove linkbtn" value="Remove"></td>';        
    echo '<td width="180"><span class="itemElements orderStatus">In Stock Usually dispatched within 24 hours</span></td>'; 
            echo '<td width="175" class="itemPriceRow"><span id="itemPrice">€ '. $row["Price"]* $row["Qty"] .'</span></td>'; 
     echo '</tr>'; 
     echo '</tbody>'; 
     echo '</table>'; 
     echo '<br>';        
} 

隠れた入力ボタンの値は、商品コードがそれに対応してロードされている行を返しました。

今私は、ページ内のすべてのprocuctId値を読み込んで配列に格納するjQueryメソッドを持っています。

$('#btnCheckout').click(function() { 
    var productId = new Array(); 
    var j = 0; 
    $(".ProductId").each(function() { 
     productId[j] == $(this).val(); 
     j++; 
    }); 
    $.ajax({ 
     type: "POST", 
     url: "functions/checkProductStock.php", 
     data: { 
      productId: JSON.stringify(productId) 
     }, 
     success: function (msg) { 
      alert(msg); 
     } 
    }) 
}) 

この方法は、その後、PHPメソッドにこれらの値を渡します。

<?php include "../config.php" ?> 
<?php 
    $productIds = json_decode($_POST['productId']); 
    var_dump($productIds); 
    //foreach loop that iterate through an array containing the product IDs and exexcutes the below method. 
    foreach ($productIds as $productId) 
    { 
     $CartDAL = new CartDAL(); 
     $result = $CartDAL->get_ProductInCartById($productId, $_SESSION["username"]); 

     $result = $ProductsDAL->get_ProductById($productId); 
     $rowProduct = $result->fetch(); 

      //Get Product Quatity Form Cart 
      $qty = $row["Qty"]; 

      //Get Product Stock 
      $stock = $rowProduct["AvailableStock"]; 

      if($qty <= $stock) 
      { 
       $CartDAL->remove_ProductInCart($productId, $_SESSION["username"]);  
      } 
      else 
      { 
       echo $rowProduct["Name"].' is out of stock!'; 
      } 
    } 
?> 

どういうわけか、私は放火犯にこのメソッドに渡される値だけを使用しているときはproductId=%5B%5Dです。 FYIに渡されると想定される値は1と2です。誤った値が読み取られて配列に渡される理由は何ですか?あるいは、私は上記の方法で間違いを犯しましたか?

+1

生成されたHTMLを生成するPHPではなく表示できますか? – lonesomeday

+0

qty <在庫があれば、このボタンは何のHTMLも生成しないことを意味しますか? –

+0

HTMLテーブルを生成するPHP。 HTMLははるかに便利です。 ! 'PRODUCTID [] PRODUCTID [] \t 1 ' とソースは、この' PRODUCTID%5B%を示しています。 – lonesomeday

答えて

1

単にあなたがそう

['Location Zero', 'Location One', 'Location Two']; 

になるだろう。この

data: { productId : productId }, 

that's it! now you can access it in PHP: 

    <? $myArray = $_REQUEST['productId ']; ?> 

var myJSONText = JSON.stringify(myObject); 

を行うことができます。

"['Location Zero', 'Location One', 'Location Two']" 

同様の方法でサーバーからデータを返すことができます。私。それをオブジェクトに戻すことができます。

var myObject = JSON.parse(myJSONString); 

これは間違っている、この質問

Passing JavaScript array to PHP through jQuery $.ajax

3

を参照してください。

productId[j]==$(this).val(); 

あなたが代わりに割り当て=

変更の平等チェック==をやっています:

productId[j]=$(this).val(); 
+0

おかげで今、この作品を作ることに一歩イム....掲載されているパラメータは、 5D = 2&productId%5B%5D = 1' –

1

Andreasあなたが割り当て=はなく==と平等のためのテストを行う必要があることを示唆しています。これは正しいです、私はあなたのコードが動作しない理由と思う。あなたは$_POST['productId']ような値にアクセスすることができますので、私はまた、Kanishkaと同じ技術を使用している

$('#btnCheckout').click(function() { 
    var productId = $('.ProductId').map(function() { 
     return this.value; 
    }).get(); 

    $.ajax({ 
     type: "POST", 
     url: "functions/checkProductStock.php", 
     data: { 
      productId: productId 
     }, 
     success: function (msg) { 
      alert(msg); 
     } 
    }); 
}); 

注:jQueryのmap機能を使用して、コードのセクション全体を構造化するよりよい方法は、しかし、があります。

関連する問題