自动刷新 PHP 功能,无需重新加载页面 Javascript / Ajax

是否可以使用 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>

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


慕神8447489
浏览 149回答 4
4回答

MM们

您已经拥有的解决方案是执行此操作的正确方法:JavaScript 获取 URL,并且该 URL 呈现适当的内容片段。重要的是要记住,就 Web 浏览器而言,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&nbsp;(&nbsp;$_GET['view']&nbsp;===&nbsp;'statusonly']&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;get_status(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit; }如何安排这完全取决于你,这就是编程的意义 🙂

慕斯王

我不确定我是否理解这个问题,但你可以使用 AJAX 来执行特定的功能。像这样的东西:首先构建你的ajax:$.ajax({&nbsp;&nbsp; type: "POST",&nbsp; url: "URL_TO_PHP_FILE",&nbsp;&nbsp;&nbsp; data: "refreshStatus", // this will call the function&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; success: function(status){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $('#Status').text(status); // this will load the info you echo&nbsp; },});由于您想每秒执行一次 - 用间隔包装整个事情(我使用问题中的代码):var auto_refresh = setInterval( function () {&nbsp; &nbsp; $.ajax({&nbsp;&nbsp; &nbsp; &nbsp; type: "POST",&nbsp; &nbsp; &nbsp; url: "URL_TO_PHP_FILE",&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; data: "refreshStatus",&nbsp; &nbsp; &nbsp; success: function(status){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $('#Status').text(status);&nbsp;&nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; });}, 1000);&nbsp;然后,在 PHP_FILE 上添加条件,以便在 POST 完成时执行特定函数:if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST['refreshStatus']) {&nbsp; &nbsp; // run this code&nbsp;}这就是你想要实现的目标吗?

SMILET

jQuery::load()支持片段标识符。所以你可以只加载你想要替换的部分:$( "#Status" ).load( "status.php #PartId" );这将加载脚本的 HTML 输出并提取该部分。PHP 脚本将完全运行 - 其余的 HTML 输出将在 JS 端被丢弃。

LEATH

仅使用 PHP 函数是不可能完成此操作的。您应该像使用 JavaScript 一样使用 JavaScript,或者使用 JavaScript 中的套接字来连接您的 status.php 并进行更新,而无需刷新整个页面。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript