2017-07-15 7 views
1

私はphp cartクラスを使用しています。ユーザーがクリックして商品を追加したときにdivを更新するjqueryが追加されました。JQuery GETは不要なHTMLを取得します

私が抱えている問題は、製品が追加されたときに、製品のリストがHTMLページ(スクリーンショット)に複製されていることです。

デフォルトのページ:

enter image description here


そして、すべての製品が追加されたときにこれが結果です:

enter image description here


あなたが見ることができるようにカートが更新されます製品の重複セットが表示されます。

ここで私が使用していますjQueryの:

<script type="text/javascript"> 
function getItem(id) 
{ 
$.ajax({ 
type: "GET", 
url: 'index2.php', 
data: "action=add&id=" + id, 
success: function(data) { 
     $('#info').html(data); 
} 

}); 

} 
</script> 

とID情報とdivの間でのPHP:

<div id="info"> 
<?php 
if(!empty($items)){ 
    echo ' 
    <table style="border:2px solid #cc0000;width:400px"> 
    <tr> 
     <td><strong>Item</strong></td> 
     <td><strong>Price</strong></td> 
     <td><strong>Quantity</strong></td> 
     <td><strong>Total</strong></td> 
     <td></td> 
    </tr>'; 

    $total = 0; 
    foreach($items as $id=>$qty) { 
     foreach($products as $product) { 
      if($product['id'] == $id) 
       break; 
     } 
     if(!isset($product['name'])) 
      continue; 

     echo ' 
     <tr> 
      <td>' . $product['name'] . '</td> 
      <td>$' . $product['price'] . '</td> 
      <td>' . $qty . '</td> 
      <td>$' . ($product['price'] * $qty) . '</td> 
      <td><a href="?action=remove&id=' . $id . '">[x Remove]</a></td> 
     </tr>'; 

     $total += $product['price'] * $qty; 
    } 

    echo ' 
    <tr> 
     <td><a href="?action=empty">[Empty Cartt]</a></td> 
     <td colspan="4" align="right"><strong>Grand Total: $' . $total . '</strong></td> 
    </tr> 
    </table>'; 
} 
else{ 
    echo '<p style="color:#990000;">Your shopping cart is empty.</p>'; 
} 
?> 
</div> 

は、私がこれを引き起こしているかわからないが。

解決方法はありますか?

+1

'index2.php'のコードは何ですか? –

+0

上記のhtmlはindex2のものです。スクリプトは同じページにあります。 –

+0

したがって、あなたのajaxリクエストは既にページにある同じデータを返します。あなたは何を期待していますか? –

答えて

0

ページ全体のコピーを内部にレンダリングしているようです。繰り返しのヘッダーに注意してください。

解決策は、index2.php(またはどのエンドポイントが最適か)が情報テンプレートのみを含むこと、または意図的にビュー全体を再描画していることを確認することです(親コンテナのhtmlを設定する必要があります。内側のもの)。

+0

私はちょうどその部分を得ることができますか?私は#infoのdivだけが取得されると思った? –

+0

情報テンプレートのみが必要な場合は、そのテンプレートをレンダリングするエンドポイントが必要です。ページ全体が表示されているようです。 JQueryはレンダリングされたページのどの部分を望むか分かりません。追加のクエリを使用して、必要なHTMLの部分だけを指定することもできますが、これは必要以上に多くのHTMLを送信しているという事実を隠すだけです。それは問題を解決しません。 –

+0

返信いただきありがとうございます。 –

0

あなたが好きな、同じ時間に、同じIDを持つただ一つのdivをしたtahtシュルを作るために、代わりにreplaceWith()を使用してみてください、同じidたびに別のdivの内側#info div要素を挿入している:

$('#info').replaceWith(data); 

これが役に立ちます。

+0

ありがとうございますが、replaceWithは以下の表を追加し続けています。だからうまくいかなかった –

関連する問題