【问题标题】:Replace HTML Button with Executed PHP用执行的 PHP 替换 HTML 按钮
【发布时间】:2015-03-07 12:27:53
【问题描述】:

这是我在这里的第一篇文章,所以提前感谢您的帮助。

我有一段 PHP 代码用于获取机场 METAR 并显示它。 'metar.php' 代码如下:

<?php

$location = "EGLL";

get_metar($location);

function get_metar($location) {
$fileName = "http://weather.noaa.gov/pub/data/observations/metar/stations/$location.TXT";
    $metar = '';
    $fileData = @file($fileName) or die('METAR not available');
    if ($fileData != false) {
            list($i, $date) = each($fileData); 

            $utc = strtotime(trim($date));
            $time = date("D, F jS Y g:i A",$utc);

            while (list($i, $line) = each($fileData)) {
                    $metar .= ' ' . trim($line);
                    }
            $metar = trim(str_replace('  ', ' ', $metar));
            }

    echo "<div style=\"color: white;\">METAR FOR $location (Issued: $time UTC):<br>$metar</div>";
    }
 ?>

目前,我的网站首页上有一些按钮在单击按钮时会重定向到 website.com/metar.php。代码如下:

 <li><button type="submit" style="height: 40px;" class="btn btn-primary" onclick="window.location.href = '/heathrow.php'"/>METAR At London Heathrow</button></li>

如果有人能告诉我如何更改此代码,以便在单击按钮时将按钮替换为 metar.php 的输出,而不是在按钮时重定向到 website.com/metar.php,我将不胜感激被点击。

我希望这是有道理的
再次非常感谢您!

【问题讨论】:

  • 欢迎来到 SO !请阅读How to ask 页面。您会注意到您应该向我们展示您尝试过的东西,而目前情况并非如此。由于有时甚至很难知道从哪里开始,这里有一些提示:您需要使用 javascript 来做到这一点。更具体地说,要请求页面,您将需要使用 AJAX。也就是说,您似乎也拥有该 meta.php 页面,因此您不妨在首页上获取此数据服务器端,将其放置在 HTML 中的某个位置但将其隐藏,并在单击按钮时显示它。
  • 对不起。正如我所说,这是我在网站上的第一个问题。您介意发布一个答案以显示我如何能够隐藏它并在单击按钮时显示它吗?再次感谢。
  • 您可以执行 AJAX 请求以完成此操作。无论如何,由于 PHP 是一种服务器端语言,如果不刷新页面(使用 PHP),您实际上无法编辑 HTML。但是,您可以通过使用 javascript 来完成此操作,并且为了更简单的用法,我会使用 jQuery 来处理这种情况,以极大地简化整个代码。请查看api.jquery.com/jquery.ajax 的示例并配置您当前的索引以对您的metar.php 脚本执行AJAX 请求,此时应该返回一个值。
  • 没什么大不了的,我们都必须从某个地方开始,但是是的,我介意发布代码,因为这是您可以在互联网上很容易找到的东西,如果您使用的是 javascript 框架(jQuery for示例)或纯 javascript。在这两种情况下,我们都在讨论 1 行代码。
  • 这行得通吗? &lt;script type="text/javascript" src="./jquery-1.3.2.min.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; $(document).ready(function() { $('#container-id-to-load-into').load('metar.php); }); &lt;/script&gt;

标签: php html button web


【解决方案1】:

这可以使用 AJAX 来完成。下面的代码展示了如何使用 jQuery 来完成。

<div id="dectinationDivId" style="color: white;"></div>

<button id="buttonId" style="height: 40px;" class="btn btn-primary">METAR At London Heathrow</button>

<script src="http://code.jquery.com/jquery-2.1.3.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $('#buttonId').click(function(){
        $.ajax({
            url: "/heathrow.php",
            success: function(data) {
                $('#dectinationDivId').html(data);
                $('#buttonId').hide();
            },
            error: function(jqXHR) {
                alert(jqXHR.responseText);
            }
        });
    });
</script>

对于多个按钮,有一种更好、更通用的方法,可以更轻松地维护代码(在本例中为添加和删除按钮)。

HTML/JS:

<script src="http://code.jquery.com/jquery-2.1.3.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        var metarButtons = $('.getMetarButtons');
        metarButtons.click(function(){
            var clickedButton = $(this);
            $.ajax({
                type: "POST",
                url: "/metarData.php",
                data: { location: clickedButton.attr('data-location') },
                dataType: 'html',
                success: function(data) {

                    $('#outputDiv').hide('slow', function() {
                        $(this).remove();
                    });

                    metarButtons.show('slow');

                    var outputElement = $('<div id="outputDiv" style="color: white;">' + data + '</div>');
                    outputElement.hide();
                    outputElement.insertAfter(clickedButton);

                    clickedButton.hide('slow', function() {
                        outputElement.show('slow');
                    });
                },
                error: function(jqXHR) {
                    alert(jqXHR.responseText);
                }
            });
        });
    });
</script>

<button style="height: 40px;" class="btn btn-primary getMetarButtons" data-location = "LLBG">METAR At Tel Aviv Ben Gurion</button>
<button style="height: 40px;" class="btn btn-primary getMetarButtons" data-location = "EGLL">METAR At London Heathrow</button>
<button style="height: 40px;" class="btn btn-primary getMetarButtons" data-location = "EGGW">METAR At London Luton</button>
<button style="height: 40px;" class="btn btn-primary getMetarButtons" data-location = "KJFK">METAR At New York John F. Kennedy</button>

PHP (metarData.php):

<?php
    $location = $_POST["location"];

    get_metar($location);

    function get_metar($location) {
    $fileName = "http://weather.noaa.gov/pub/data/observations/metar/stations/$location.TXT";
        $metar = '';
        $fileData = @file($fileName) or die('METAR not available');
        if ($fileData != false) {
            list($i, $date) = each($fileData); 

                $utc = strtotime(trim($date));
                $time = date("D, F jS Y g:i A",$utc);

                while (list($i, $line) = each($fileData)) {
                    $metar .= ' ' . trim($line);
                }
            $metar = trim(str_replace('  ', ' ', $metar));
        }

        echo "METAR FOR $location (Issued: $time UTC):<br>$metar";
    }
?>

【讨论】:

  • @MažvydasTadaravičius 好吧,成功了一半。请参阅website 并尝试单击按钮。似乎只有最上面的一个有效,然后在单击时随机加载四个定义的站点之一。
  • @TheoBearman - 当通过 id 选择元素时,如果有多个具有相同 id 的元素,则只选择第一个。在您的情况下,因为您有 4 个按钮,所以必须使用 4 个唯一的 ids。或者对 PHP、JS 和 HTML 进行一些修改,您可以拥有 4 个具有相同类和 location 属性的按钮,这些按钮将被传递给 PHP。这样,只需要声明一个 AJAX 函数。
  • @MažvydasTadaravičius 我明白了。我目前正在上课,但我会尽可能为每个按钮分配一个唯一的 ID。那应该可以正常工作吗?
  • @MažvydasTadaravičius 是我需要使 buttonID 或 DivID 唯一还是两者兼而有之?
  • @TheoBearman - 如果你使用 Copy/Paste 方法,那么两个 ids 必须是唯一的,JS 代码也是 Copy /Paste 并相应更改。正如我之前提到的,有一种更好、更通用的方法。我已经更新了我的答案以显示它。
猜你喜欢
  • 2015-09-07
  • 2022-07-28
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 2012-10-15
相关资源
最近更新 更多