【问题标题】:Execute a CGI each time a button was clicked without changing the current html page每次单击按钮时执行 CGI,而不更改当前 html 页面
【发布时间】:2011-05-04 11:22:25
【问题描述】:

我开始在能够从网页控制多个 domotics 设备的家庭服务器上实习。全局思想是基于单击按钮,在服务器上生成特定脚本并控制微控制器。

我的导师建立了一个他给我的简单网站,使用 AJAX 始终停留在一个页面上,并根据用户操作带来菜单(如果不使用它们会被隐藏,如果使用则会回到前面)。

我已经设置了一个配置为执行 CGI 脚本的 apache 服务器,它可以工作。 为了始终停留在一个页面上,我使用了“204 No Content”返回技巧,因此服务器对该页面的回答是“我没有什么要说的,就停留在这个页面上”。

但我遇到的一个问题是 CGI 只启动了一次。如果我第一次单击该按钮,它会起作用,然后什么都不会发生。

我尝试使用 SSI (shtml) 来使用按钮代码,而不是使用带有 GET 方法的 FORM,但脚本仍然不会执行两次。

我可能使用了错误的工具。我应该继续使用 CGI 吗?还是有其他东西(如 AJAX、jquery)实际上是为了做我想要的?

感谢您的阅读。

编辑:我找到了解决方法(总是在寻找答案几天后绝望的时候,我去论坛然后在接下来的一个小时内找到一个很好的解决方案......) 我使用了一个基本链接,由于某种原因,它的行为与使用按钮不同。任何。我对所使用技术的质疑仍然存在:)

EDIT2:我的解决方案很糟糕,出于某种原因,该脚本也会在页面刷新时(或页面首次加载时)被调用。这很奇怪,因为它在里面,所以只有当我点击它时才会产生它......

【问题讨论】:

    标签: html apache cgi ssi


    【解决方案1】:

    熟悉 jQuery 及其AJAX API。除非您使用 AJAX,否则无法使其不加载新页面。以下是 AJAX 调用的示例:

    $.ajax({
        url: 'http://server.domain.com/cgi-bin/myfile.cgi',
        data: {
           x: 1,
           today: '20110504',
           user: 'Joe'
        }
    }).success(function(data, status, xhr) {
        if (data)
            alert(data);
    });
    

    这适用于 jQuery 1.5 或更高版本。您可以在单击某个按钮时运行它,如下所示:

    按钮的 HTML:

    <input type="button" id="doThis"/>
    

    JavaScript:

    $(function() {
        $('#doThis').click(function() {
            //put AJAX sample shown above, here
        });
    });
    

    【讨论】:

    • 嗨,迈克,感谢您的建议。我需要一段时间才能弄清楚如何使用 html、javascript、AJAX 和 jquery,因为我更专注于电子产品,但我想那里有不错的 tutos。只有一件事:即使通过使用“204 No Content”技巧不使用 AJAX,也可以不刷新页面,我做到了。但是 ofc,这只不过是一种 hack,因为我想要做的是 - 我怀疑 - 不是出于所使用的技术的意图。
    猜你喜欢
    • 2020-10-18
    • 2022-08-08
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多