RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1147642
Accepted
Иван
Иван
Asked:2020-07-01 07:40:43 +0000 UTC2020-07-01 07:40:43 +0000 UTC 2020-07-01 07:40:43 +0000 UTC

如何检测mysql表列中的价格变化并在网站上显示一次ajax请求?

  • 772

有一个脚本每隔几分钟更新一次数据库。

第二个脚本显示从数据库到站点的最新信息。

如何在网站上直观地展示价格变化的效果?

那些。假设价格是 5000 卢布,页面是使用 ajax 更新的,但是数据库中的价格已经是 4500,如何告诉脚本价格发生了变化以便可视化?

我想在数据库中你需要有2个相似的表或者创建一个临时表并在输出到站点时比较两个表中的值。

我不明白这背后的机制。假设第一个表有 5000,第二个表有一个新的值 4500,我会在网站上显示。下一个 ajax 更新接下来要做什么,要比较什么和比较...因为价格会有所不同,并且网站将一次又一次地具有价格变化的视觉效果,而实际上没有变化。

帮助我理解。

任务:将有关所有更改的信息保存在特定表中。最简单的解决方案是创建一个与跟踪表的结构相匹配的表,并在每次更改时将更改行的更新状态写入该表中。您可以使用跟踪 INSERT、UPDATE 和 DELETE 操作的触发器来执行此操作。

发生了变化,我写下了这一行,我应该将这些值与什么进行比较?毕竟,UPDATE 将更新主表并将数据写入第二个表,它们将是相同的。

使困惑...

<script type="text/javascript">
    function show()  
    {  
        $.ajax({  
            url: "ajax.php",  
            cache: false,  
            success: function(html){  
                $("#app").html(html);  
                $('.box').first().addClass('animate__animated animate__bounce'); //  $('.box').first().addClass('animate__animated animate__bounce');
            }  
        });  
    }  
  
    $(document).ready(function(){  
        show();  
        setInterval('show()',1000);  
    });  
</script>

Ajax html 响应

<tbody>
              <tr>
                <td>
                  <a href="https://site.ru">title</a>
                </td>
                <td>1000 <i class="ic-icon_rub"></i>
                </td>
                <td> 
                  <span class="xxx-text-bold">автор</span>
                </td>
                <td>id 3</td>
              </tr>
              
              <tr>
                <td>
                  <a href="https://site.ru">title</a>
                </td>
                <td>1000 <i class="ic-icon_rub"></i>
                </td>
                <td> 
                  <span class="xxx-text-bold">автор</span>
                </td>
                <td>id 4</td>
              </tr>
</tbody>

标题你需要写 class="box"

您可以更改html,我会适应它。

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Максим Степанов
    2020-07-03T04:57:10Z2020-07-03T04:57:10Z

    如果任务只是在客户页面显示价格变化,那么算法可以如下:

    1. 我们从页面中获取有关产品的价格或一系列价格。
    2. 在我们发送一个 ajax 请求时,使用 POST 方法,我们将一个包含价格、产品 ID 等的数组放入其中。
    3. 在服务器上,我们将价格与基数进行比较,形成一个包含变化的数组并将其发送回页面。
    4. 我们以某种方式突出显示更改的价格。

    并且不需要第二张桌子

    你的代码可能是这样的:

    <?php 
    // файл index.php 
    
    // получаем массив товаров из базы (Select * FROM table и так далее). 
    // Для примера я подготовлю данные, как будто получены из базы
    $data = array(
        3 => array(
            'title' => 'товар3',
            'price' => 5000
        ),
        4 => array(
            'title' => 'товар4',
            'price' => 4500
        )
    );
    ?>
    
    <!-- теперь выводим этот массив -->
    <table>
        <?php foreach($data as $id => $item){ ?>
        <tr>
            <td><?=$item['title']?></td>
            <td>
                <span class="price" data-id="<?=$id?>" data-price="<?=$item['price']?>"><?=$item['price']?></span>
            </td>
        </tr>
        <?php } ?>
    </table>
    
    <script>
        
    window.addEventListener('load', function(){
        setInterval(updatePrices, 1000);
    });
    
    function updatePrices(){
        let prices = {};
        // найдем все элементы товаров по классу "price"
        $('.price').each(function(e, elem){  // здесь elem - это наш <span> с ценой
            prices[$(elem).data().id] = $(elem).data();
        });
        
        // теперь в массиве prices у нас:
        /**
        3: {item_price: 5000, item_id: 3}
        4: {item_price: 4500, item_id: 4}
        */
       
        $.ajax({
            url: 'ajax.php',
            type: 'POST',
            dataType: 'json',
            data: {client_prices: prices },
            success: function(jsonResponse){
                // здесь у нас в jsonResponse массив с обновленными ценами
                for(var id in jsonResponse){
                    // находим на странице элемент c нужным значением атрибута data-id и меняем его цвет и содержимое
                    $('[data-id='+id+']').css('color', 'red').html( jsonResponse[id]['price'] );
                }
            },
            error: function(jqXHR, status, msg){
                console.log(jqXHR); console.log(msg+' '+status); 
            }
        });
    }
        
    </script>
    

    我们将在服务器上接收数据:

    // файл ajax.php
    
    // получаем данные из аякса
    $client_post_data = filter_input_array(INPUT_POST);
    $client_prices = $client_post_data['client_prices'];
    
    // берем цены из базы (как и на перовй странице, то же самое).
    // получаем массив товаров из базы (Select * FROM table и так далее). 
    // Для примера я подготовлю данные, как будто получены из базы, с измененной ценой "товар3"
    $db_price = array(
        3 => array(
            'title' => 'товар3',
            'price' => 7000
        ),
        4 => array(
            'title' => 'товар4',
            'price' => 4500
        ),
    );
    
    $changed_prices = array();
    
    // сравниваем цены:        
    foreach ($client_prices as $id => $client_price){
        if($client_price['price'] != $db_price[$id]['price']){
            $changed_prices[$id]['price'] = $db_price[$id]['price'];  // если цена не совпадает, сохраняем новую из базы
        }
    }
    
    // теперь в массиве $changed_prices только те цены, которые изменены
    // отправляем его:
    echo json_encode($changed_prices);
    
    • 1

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5