2014-02-13 69 views
0

我正在創建一個購物車,我無法讓jquery和php正常工作。我有一個叫做displayAmount($price)的函數,它目前只是將數字格式化爲2個小數點,並將英鎊符號添加到它。我希望保留這個功能,因爲我希望能夠允許用戶更改當地貨幣,它將使用此函數來計算並顯示正確的價格和貨幣。使用jquery更改選擇價格,回聲價格與PHP函數

我希望能夠在視圖產品頁面上顯示價格,並在用戶更改選擇框中的選項時更改它。

所以我有這樣的:

的jQuery:

$("select").live('change',function() { 
     var price = 0; 
     $("select option:selected").each(function() { 
     price += parseFloat($(this).data('price')); 
     }); 
     $('#productPriceLabel').html(price); 
    }); 

HTML:

<select class='productSelectOptions'> 
<option data-price='+10'>+10</option> 
<option data-price='+20'>+20</option> 
</select> 
<br> 
<span id='productPriceLabel'></span> 

也能正常工作,以改變價格。不過,我需要能夠使用echo displayAmount($price)

迴應價格我該怎麼做?

感謝

編輯:

function displayAmount($amount) 
    { 
     $xamount = str_replace('.', '', $amount); 
     $type = gettype($xamount); 

     if($type = integer) { 
      global $Config; 
      return $Config['currency'] . number_format($amount, 2); 
     } else { 
      return $amount; 
     } 
    } 

第二個編輯:(FULL CODE)

// Get prices from database 
        $priceSQL = "SELECT * 
           FROM shopProductsPrices 
           WHERE pd_id = '$productId'";  
        $priceResult = dbQuery($priceSQL); 
        $priceOptions = ""; 
        $productLowestPrice = 10500; 
        while($priceRow = dbFetch($priceResult)) { 
         if($productLowestPrice > $priceRow['spp_price']) { $productLowestPrice = $priceRow['spp_price']; } 
         $priceOptions .= "<option data-price='+".$priceRow['spp_price']."'>".$priceRow['spp_name']."</option>"; 
        } 
        if($productLowestPrice == 10500) { $productLowestPrice = 0; } 







<table style="border: none; width: 300px;"> 
               <tr> 
                <td> 
                 <span id="productContentItem">Package:</span> 
                </td> 
                <td> 
                 <select class='productSelectOptions'> 
                  <?= $priceOptions ?> 
                 </select> 
                </td> 
               </tr> 
               <tr> 
                <td> 
                 <span id="productContentItem">Quantity:</span> 
                </td> 
                <td> 
                 <select class='productSelectOptionsQty'> 
                  <option value="1">x1</option> 
                  <option value="2">x2</option> 
                  <option value="3">x3</option> 
                 </select> 
                </td> 
               </tr> 
               <tr> 
                <td> 
                </td> 
                <td> 
                 <?= $productAddToBasket ?> 
                </td> 
               </tr> 
              </table> 

                 <span id='productPriceLabel'><?= displayAmount($productLowestPrice) ?></span> 
<script> 
    $(".productSelectOptions").live('change',function() { 
     var price = 0; 
     $(".productSelectOptions option:selected").each(function() { 
     price += parseFloat($(this).data('price')); 
     $.ajax({ 
      type: "POST", 
      dataType: "html", 
      url: '<?= SERV_ROOT ?>library/common.php', 
      data: '&price='+price, 
      success: function(returnedData){ 
      $('#productPriceLabel').html(returnedData); 
      }, 
      error: function(){ 
      $('#productPriceLabel').html('Error Formatting'); 
      } 
     }); //END Ajax 
     }); 

    }); 
</script> 
+0

在這裏發表您的PHP函數。 –

+0

已添加到原始文章對不起 – user3306587

+0

當您使用jQuery時,與用戶的交互發生在客戶端(在用戶的瀏覽器中)。所有的PHP腳本都是在服務器端處理的(換句話說,在頁面傳遞給客戶端之前處理PHP)。如果您希望讓用戶在您的網頁上更改貨幣下拉並使用PHP腳本重新格式化您的定價,則需要使用Ajax。請參閱:https://api.jquery.com/jQuery.ajax/ 如果您願意,我可以嘗試詳細說明,但我不能作爲評論。 –

回答

1

這裏是不能把我在我的評論:

我改變您的「選擇更改」功能僅在您的「productSelectOptions」更改時執行。否則,它將在任何選擇選項更改時執行。那是你想要的嗎?

這裏是更改後的jQuery代碼,它會將您的新價格發送到您的PHP頁面以使用您的PHP函數進行格式化。

$(".productSelectOptions").live('change',function() { 
    var price = 0; 
    $(".productSelectOptions option:selected").each(function() { 
    price += parseFloat($(this).data('price')); 
    $.ajax({ 
     type: "POST", 
     dataType: "html", 
     url: 'formatdisplayAmount.php', 
     data: '&price='+price, 
     success: function(returnedData){ 
     $('#productPriceLabel').html(returnedData); 
     }, 
     error: function(){ 
     $('#productPriceLabel').html('Error Formatting'); 
     } 
    }); //END Ajax 
    }); 

}); 

你 「formatdisplayAmount.php」 將包括你的格式化功能和類似於下面:

function displayAmount($amount) 
{ 
    $xamount = str_replace('.', '', $amount); 
    $type = gettype($xamount); 

    if($type = integer) { 
    global $Config; 
    return $Config['currency'] . number_format($amount, 2); 
    } else { 
    return $amount; 
    } 
} 

echo displayAmount($_POST['price']); 
+0

謝謝。我試過這個,但它不會工作。價格不通過_POST? 這是我正在處理的頁面的URL。也許這會有所幫助。 http://bitandpiecesvape.co.uk/site/?cid=28&pdid=82 編輯:我也編輯了我原來的文章,包括代碼作爲一個整體,不包括目前相同的PHP函數您的帖子。 – user3306587

+0

所以<?= SERV_ROOT?>庫/通用。PHP沒有收到通過$ .ajax發送的$ _POST變量「價格」?你可以在你的common.php頁面添加:'print_r($ _ POST);'並將'console.log(returnedData);'添加到Ajax Success功能,並且知道你的調試說了什麼? –