2011-12-23 6 views
0

저는 작은 장바구니를 만들고 있습니다. 현재 결제 페이지로 진행하기 전에 각 제품의 재고를 확인하는 결제 기능을 구현하려고합니다.json을 사용하여 PHP에 jquery 배열을 전달하십시오.

이 while 루프가 "shoppingCart가"표의 각 행에 표시되어 숨겨진 입력 버튼의 값은 제품 ID는 그 대응로드되고 그 동안 루프

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>';        
} 

가 행을 반환.

이제이 jQuery 메서드가 페이지의 모든 procuctId 값을 읽고 배열에 저장해야합니다.

$('#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이다 나는 방화범이 메서드에 전달되는 유일한 값을 사용하고 있습니다 때. 참고 전달되어야하는 값은 1과 2입니다. 잘못된 값을 읽고 배열에서 전달하는 이유는 무엇입니까? 아니면 위의 방법으로 실수를 했나요?

+1

생성 된 HTML을 생성하는 PHP 대신 표시 할 수 있습니까? – lonesomeday

+0

qty

+0

HTML 테이블을 생성하는 PHP입니다. HTML이 훨씬 더 유용 할 것입니다. ! – lonesomeday

답변

1

은 단순히 당신이 또한

var myJSONText = JSON.stringify(myObject); 

data: { productId : productId }, 

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

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

그래서

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

이 될 것입니다 수행 할 수 있습니다

"['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

덕분 이제 순방향이 작업을 하나의 단계 임 .... 등록한되는 매개 변수 : '제품 일련 [] \t 2 productId에 [] \t 1' 소스이 '제품 ID %를 나타낸다 5B % 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 기능을 사용하여 코드의 전체 섹션을 구성 할 수있는 더 좋은 방법은, 그러나,있다.

관련 문제