【问题标题】:Change MySQL Result on Hover悬停时更改 MySQL 结果
【发布时间】:2015-04-19 20:10:45
【问题描述】:

我正在为魔兽世界物品制作工具提示。 wowhead.com 有一个类似的插件,但他们对整个插件使用 JavaScript。所以,我想这样做,当我将鼠标悬停在一个段落上时,我的脚本中的 MySQL 查询应该改变。它应该从隐藏的输入中获取一个值。所以,我的表格是这样的:

<form action="functions/itemvar.php" method="POST">
<p class="name">Random Item Name</p>
<input type="hidden" id="entry1" name="entry" value="12345">
</form>

我的 SQL 查询如下所示:

SELECT * FROM item_template WHERE entry = 12345

因此,当您将鼠标悬停在段落标记上时,PHP 脚本中的 MySQL 查询条目应该会发生变化。所以 MySQL 查询从 input hidden 中获取结果。

我确实为刚刚写的 12345 临时条目使用了变量。

【问题讨论】:

  • 你也应该发布你的 php 代码
  • 您几乎肯定不想每次有人将鼠标悬停在某个元素上时都运行查询;这将带来巨大的负载,并且许多查询将在用户继续前进后返回响应。
  • 我只是希望它像这样工作wowhead.com/items=2 我不知道他们是否在每次有人将鼠标悬停在项目名称上时都会运行查询或它实际上是如何工作的。但这就是我想做的。只要我能得到与此相同的东西,该功能的工作方式并不重要。 Wowhead 分享了他们的工具提示 javascript,但 javascript 只从现实的魔兽世界中选择项目,我想将此功能用于自定义项目。所以暴雪服务器上不存在的项目。因为我有自己的私人服务器,我想显示我的自定义项目

标签: javascript php jquery mysql json


【解决方案1】:

您可以使用 jQuery 和 Ajax 做到这一点。为要绑定悬停事件的每个段落分配一个自定义类。然后使用 jQuery 捕获该类,并在悬停时对提供查询结果的 PHP 脚本执行 AJAX 调用。

【讨论】:

    【解决方案2】:

    到目前为止,您尝试了什么?
    您只需要在悬停事件时向 php 文件发送 AJAX 请求,对吧?

    1. $.hover()
    2. $.get()

    SQL Injection

    【讨论】:

    • 你是问还是说?答案应该提供答案而不是提问,也许这应该是评论?此外,如果您要回答,则应尽可能提供示例以配合链接。
    • 好吧,我对jQuery或AJAX一无所知,我只知道php、html、css和MySQL。所以我什至不知道从哪里开始使用 jQuery 或者我应该如何使用 AJAX。我一直在谷歌上四处寻找,但如果不重新制作整个 jQuery,我找不到任何可行的方法,然后我宁愿从头开始
    【解决方案3】:

    听起来你需要一些东西才能让它工作;总体而言,您需要一种方法:

    • 检测到客户端已将鼠标悬停在您的项目名称上
    • 在客户端(即在浏览器中)获取隐藏值
    • 将隐藏值发送到服务器
    • 处理响应(例如绘制工具提示)

    您发布的 html 非常接近实现这一目标,但我猜您将在一个页面中拥有多个项目链接。考虑到这一点,您可以首先像这样简化您的标记:

    <p class="name item-hover-link" data-item-id="12345">
        Barman's Shanker
    </p>
    

    现在您的 html 包含所有必要的信息。但是,您发布的版本也很好,它只是包含了很多您不一定需要实现您所说的特定目标的东西。

    接下来,我们将使用jQuery 来检测您是否将鼠标悬停在某个项目上。 注意: 许多 Web 开发人员倾向于使用 jQuery 而不是原始的 javascript,尤其是与 ajax 相关的东西。我特别懒,所以我也选择了。

    确保jQuery/javascript 出现在您的 html 之后或在 onLoad 事件中启动;否则,它将无法找到任何“.item-hover-link”元素。

    function drawTooltip(data) {
        // Google different tooltip drawing implementations
        // I'd be amazed if there isn't a 'WoW-style' tooltip
        // guide somewhere out there
    }
    
    $(".item-hover-link").hover(
        function() {
            // Mouse entering the link
    
            // $this refers to the <p> that was hovered over
            var $this = $(this);
    
            // Check if any previously-loaded item data has been stored
            // e.g. they have hovered over it before
            var loadedItemData = $this.data("loaded-item-data");
    
            if(loadedItemData !== undefined){
                // It's been previously loaded! Use that data to draw
                // a tooltip, no need for a server round-trip
                drawTooltip(loadedItemData);
            }
            else {
                // It hasn't been loaded before, you need to GET it
                // from the server
    
                // Here's where data-item-id="12345" comes in
                var id = $this.data("item-id");
    
                var request = "/functions/itemvar.php?id=" + id;
    
                $.get(request, function(data) {
                    // Your php is generating the response, do whatever
                    // with it here, I'll assume you didn't touch it.
    
                    drawTooltip(data);
    
                    // And cache it, to prevent another round trip if they
                    // re-hover (care for memory leaks though)
                    $this.data("loaded-item-data", data);
                });
            }
    
        },
        function() {
            // Mouse leaving the link, you should use this
            // area to remove any initialized stuff while doing
            // your round-trip (loading animations, get requests,
            // tooltips, etc)
            hideTooltip();
        }
    );
    

    这种方法应该可以帮助您完成大部分工作。但是,您需要确保您的后端符合请求(我假设它是对工具提示存根的 GET 请求?)。此外,您还需要一种绘制自定义工具提示的方法,就像 wowdbthottbot 一样(这对孩子们来说仍然很流行吗?)。如果你想要一个快速的解决方案或查看谷歌工具提示的各种方法,我会推荐 jQueryUI tooltip 之类的东西。

    【讨论】:

    • 谢谢,非常感谢!但是,仅复制/粘贴它是行不通的,所以我想我需要向它添加更多内容。就像我说的我根本没有使用 jQuery 的经验,所以我看不到是否缺少任何东西,我真的不知道如果缺少某些东西我应该如何找到丢失的部分。
    • 我想如果我只是向你展示我的脚本会更好......但是代码很混乱但是当我在 html 和 POST 方法中使用表单时它确实有效pastebin.com/7qAhpvk8 pastebin.com/Fiv4iww2
    • 嘿蒂姆,没问题。我发布的代码只是一个基本框架,您需要根据您的特定需求进行定制。我在WebStorm 上快速调试了它,它似乎在浏览器中击中了相关断点,但您需要定制您的php 后端并实现工具提示绘图功能。出于调试目的,如果您没有javascript 调试器(还没有!)
    • 嘿,我个人是ruby on rails 开发人员,我只在php 上做了一小段时间(也许几百个小时)。查看itemvar.php,您可能希望在javascript 中更改为var request = "/functions/itemvar.php?entry=" + id。您的 php 仅在 $_GET['entry'] 行中寻找 entry。我跳过了各种开关等到您的回显文本。在我的解决方案中,我假设您正在构建 json 响应,而不是 html 响应。目前,您的 php 代码正在回显整个页面(包括&lt;html&gt; 标签)。相反,您只想回显数据。
    • 如果你想在你的页面中找到动态的基于ajax的行为,那么我建议你在谷歌中查找像 "php json builder" 这样的东西。相比之下,尝试使用客户端 javascript 解析 HTML(或更一般地说,xml)通常有点痛苦。但是,如果您坚持这样做,那么像jQuery 这样的库会附带像$.parseHTML 这样的方法。不过,您必须阅读它
    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 2012-03-13
    • 2015-09-06
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多