【问题标题】:JQuery GET retrieves unwanted HTMLJQuery GET 检索不需要的 HTML
【发布时间】:2017-07-16 03:18:03
【问题描述】:

我正在使用 php 购物车类,并添加了一些 jquery 以在用户单击添加产品时更新 div。

我遇到的问题是,当添加产品时,产品列表在 html 页面(屏幕截图)上重复,尽管它不在它的源中。

默认页面:


当添加任何产品时,结果如下:


您可以看到购物车已更新,但出现了一组重复的产品。

这是我正在使用的 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>

我不知道是什么原因造成的。

任何解决方案将不胜感激!

【问题讨论】:

  • index2.php 的代码是什么?
  • 上面的html来自index2。脚本在同一页面中。
  • 所以您的 ajax 请求返回页面中已有的相同数据。你期待什么?
  • 只是购物车部分而不是产品表。

标签: javascript php jquery html ajax


【解决方案1】:

看起来您正在将整个页面的副本呈现在其自身内部。注意重复的标题。

解决方案是确保 index2.php(或任何最好的端点)仅包含信息模板,或者您有意重新渲染整个视图(并且应该设置父容器的 html,而不是内层)。

【讨论】:

  • 我怎样才能得到那部分?我以为只有#info div 只会被检索到?
  • 如果您只需要信息模板,则需要一个仅呈现该模板的端点。看起来您正在获取整个页面。 JQuery 不知道您想要呈现页面的哪一部分。您可以使用附加查询仅指定您想要的 HTML 部分,但这只会隐藏您发送的 HTML 比您需要的多的事实;它不能解决问题。
  • 谢谢你的回复,有什么例子吗?
【解决方案2】:

您每次都将 #info div 插入另一个具有相同 id 的 div 中,尝试使用 replaceWith() 代替,以确保您只有一个带有同一时间同一id,如:

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

希望这会有所帮助。

【讨论】:

  • 感谢您,但 replaceWith 会继续在下面添加更多表格。所以没用
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2011-12-15
  • 2014-03-17
  • 2012-01-28
相关资源
最近更新 更多