【问题标题】:Auto Refresh PHP Function without reloading page Javascript / Ajax自动刷新 PHP 功能,无需重新加载页面 Javascript / Ajax
【发布时间】:2020-12-11 13:30:02
【问题描述】:

是否可以使用 Ajax、Jquery 或 Javascript 调用特定的 PHP 函数并每 10 秒刷新/重新加载一次,例如在特定的 Div 或区域内?

连接.php

function TerminalStatus ($IPAddress, $portStatus ) // Responsible for current terminal status
{
    $connectStatus = fsockopen($IPAddress, $portStatus, $errno, $errstr, 10); // Build cconnection to Terminal socket 25001
    if (!$connectStatus) {
        echo "$errstr ($errno)<br />\n";
    } else {
       $Status =  fgets($connectStatus) ;
        echo $Status ();
    }
}

这个连接只是为了查看一个终端的当前状态。 我想在我的 index.php 底部看到这个函数的状态而不刷新整个页面。

我可以通过将此函数放在它自己的 PHP 文件 (status.php) 中并按以下方式使用 Javascript 来完成此操作:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
    var auto_refresh = setInterval(
        function ()
        {
            $('#Status').load('status.php');
        }, 1000); // refresh every 1000 milliseconds
</script>

但我只想使用该功能。 这可能吗?

【问题讨论】:

  • 无法直接从 Javascript 调用 PHP,因为 PHP 是服务器端代码!他需要由服务器(Apache/Nginx)解释。 编辑:这就是为什么如果你像你那样做你的 php 文件的 XHR 它可以工作。
  • 您需要每 10 秒进行一次 AJAX 调用。
  • .load 接受数据参数。为什么不传递一个参数,并在 PHP 中检查它。如果参数存在(或具有特定值),则执行该函数,否则只响应整个页面。

标签: javascript php jquery ajax


【解决方案1】:

您已经拥有的解决方案是执行此操作的正确方法:JavaScript 获取一个 URL,该 URL 呈现适当的内容。

重要的是要记住,就网络浏览器而言,PHP 不存在。来自浏览器的任何请求——无论您是否输入了 URL、点击链接、提交表单、发出 AJAX 请求等——都只是针对特定 URL 的某个远程服务器的消息,可能还带有一些额外的标头和身体数据。当服务器收到该请求时,它可以为所欲为向浏览器生成响应。

所以当你写$('#Status').load('status.php');时,浏览器正在向服务器发送一个请求,而服务器恰好被配置为执行PHP脚本status.php。然后,您可以在 PHP 中执行您喜欢的操作来生成响应 - 但请求和 PHP 函数之间没有直接链接

但是,正如其他人指出的那样,您不必为您想要的每个行为都创建一个新的 PHP 文件,因为 在 PHP 代码中您可以检查以下内容:

  • 查询字符串参数,在$_GET
  • 提交的表单数据,在$_POST
  • 请求中的 HTTP 标头

这些可以由您的 JavaScript 代码设置为您喜欢的任何内容,例如,您可以编写 $('#Status').load('index.php?view=statusonly');,然后在 index.php 的顶部有这样的代码:

if ( $_GET['view'] === 'statusonly'] ) {
    echo get_status();
    exit;
}

你如何安排这完全取决于你,这就是编程的全部内容?

【讨论】:

    【解决方案2】:

    仅使用 PHP 函数是不可能做到这一点的。

    您应该在使用 javascript 时使用它,或者在 javascript 中使用套接字来连接您 status.php 并在不刷新整个页面的情况下进行更新。

    【讨论】:

      【解决方案3】:

      我不确定我是否理解问题,但您可以使用 AJAX 来执行特定功能。像这样的:

      首先建立你的ajax

      $.ajax({ 
        type: "POST",
        url: "URL_TO_PHP_FILE",  
        data: "refreshStatus", // this will call the function      
        success: function(status){          
          $('#Status').text(status); // this will load the info you echo
        },
      });
      

      因为你想每秒都做一次 - 用间隔包装整个事情(我使用你的代码):

      var auto_refresh = setInterval( function () {
          $.ajax({ 
            type: "POST",
            url: "URL_TO_PHP_FILE",  
            data: "refreshStatus",
            success: function(status){          
              $('#Status').text(status); 
            },
          });
      }, 1000); 
      

      然后,在你的 PHP_FILE 上添加条件,当 POST 完成时执行特定的函数:

      if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST['refreshStatus']) {
          // run this code 
      }
      

      这是你的目标吗?

      【讨论】:

        【解决方案4】:

        jQuery::load() 支持片段标识符。所以你可以只加载你想要替换的部分:

        $( "#Status" ).load( "status.php #PartId" );
        

        这将加载脚本的 HTML 输出并提取部分。 PHP 脚本将完全运行 - 其余的 HTML 输出将在 JS 端丢弃。

        【讨论】:

        • 对于那些刚接触相关概念的人来说值得注意的是,这仍然会获取整个页面,因此运行整个 PHP 脚本,并且扔掉最后不匹配选择器的所有东西。
        猜你喜欢
        • 1970-01-01
        • 2017-10-06
        • 2018-05-09
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-17
        相关资源
        最近更新 更多