微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-使用Ajax从实时PHP和Python输出更新页面内容

长期用户,首次申请者.我从社区中学到了很多,而且我喜欢这个网站.

所以这就是我的目标.我想要一个在后端运行ping命令的Web界面.理想情况下,我想要一个网站,该网站的文本输入可让您输入IP地址或域,运行该命令的按钮以及从PHP运行以实际运行ping命令的python脚本.棘手的部分是使输出在命令行上输出时可以实时打印到网站上.我想以这种方式做为将来验证该概念并最终使用不同的iperf参数的方法.

我建立了一个小的PHP页面,“从技术上”完成了工作,但是我想不出如何仅在单击按钮时调用PHP脚本.由于它是一个PHP页面,因此每当页面加载时便会运行.因此,在进行了一些研究之后,我发现我正在寻找ajax jquery.我花了大约2天的时间尝试各种不同的事情,这些事情使我与我真正地融为一体,但似乎我正在围绕解决方案跳舞.

从对ajax的了解中,我实质上需要一个按钮,该按钮运行一个与我的工作PHP脚本链接的ajax函数.我可以通过它来运行脚本,但不能以实时/连续方式来更新页面内容.仅在命令完成运行时.

这是我的PHP页面,它会执行所需的操作,但每次页面加载/重新加载时都会执行.不理想.我希望脚本仅在按下按钮时运行.

liveping.PHP

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<form action="liveping.PHP" id="ping" method="post" name="ping">
		Domain/IP Address: <input name="domain" type="text"> <input name="ping" type="submit" value="Ping">
	</form><?PHP

	if (isset($_POST['ping'])) {
	  function liveExecuteCommand($cmd)
	  {
	      while (@ ob_end_flush()); // end all output buffers if any

	      $proc = popen("$cmd 2>&1", 'r');

	      $live_output     = "";
	      $complete_output = "";

	      while (!feof($proc))
	      {
	          $live_output     = fread($proc, 4096);
	          $complete_output = $complete_output . $live_output;
	          echo "<pre>$live_output</pre>";
	          @ flush();
	      }

	      pclose($proc);
	  }
	}

	$domain =  $_POST['domain'];

	$pingCmd = "python /var/www/html/ping.py ".$domain;

	if (isset($_POST['ping'])) {
	  liveExecuteCommand($pingCmd);
	}

	?>
</body>
</html>

ping.py:

#!/usr/bin/python
import cgi
import os
import sys
ping = "ping -c 5 -W 2 "+sys.argv[1]
os.system(ping)

我尝试过的一些事情:

<html>
    <head>
        <script>
        var ajax = new XMLHttpRequest();
        ajax.onreadystatechange = setInterval(function() {
            if (ajax.readyState == 4) {
                document.getElementById('content').innerHTML = ajax.responseText;
            }
        },100);
        function updateText() {
            ajax.open('GET', 'ajax.PHP');
            ajax.send();
        }
        </script>
    </head>
    <body>
        <button onclick="updateText()">Click Me</button>
        <div id="content">nothing here yet.</div>
    </body>
</html>

要么

<!DOCTYPE html>
<html>
	<body>
		<head>
			<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 ()
			      {
			         $('#load_tweets').load('ajax.PHP').fadeIn("slow");
			      }, 1000); // refresh every 10000 milliseconds
			</script>

		</head>

     <div id="load_tweets"> </div>
	
	</body>
</html>

与ajax.PHP

<?PHP
while (@ ob_end_flush()); // end all output buffers if any

$proc = popen("ping -c 5 -W 2 google.com", 'r');

$live_output     = "";
$complete_output = "";

while (!feof($proc))
{
    $live_output     = fread($proc, 4096);
    $complete_output = $complete_output . $live_output;
    echo "<pre>$live_output</pre>";
    @ flush();
}

pclose($proc);
?>

谢谢你的帮助!

解决方法:

您不需要python即可显示ping结果.仅两个PHP文件就足够了.

> index.PHP将具有AJAX功能以及表单.
> ajax.PHP将具有用于ping指定域地址的代码.

我担心使用jQuery可能无法捕获实时提要.因为它没有任何onreadystatechange.因此,在这种情况下,您可能需要使用原始JavaScript.这是一个工作示例:

index.PHP

<!DOCTYPE html>
<html>
<head>
    <title>Ping AJAX</title>
</head>
<body>
    <div>
        Domain/IP Address: <input id="domain" type="text"> 
        <input id="ping" type="button" value="Ping">
    </div>
    <div id="result"></div>
    <script>
        function updateText(domain) {
            var ajax = new XMLHttpRequest();
              ajax.onreadystatechange = function() {
                if (this.readyState == 3) {
                  var old_value = document.getElementById("result").innerHTML; 
                  document.getElementById("result").innerHTML = this.responseText;
                }               
            };          
            var url = 'ajax.PHP?domain='+domain;
            ajax.open('GET', url,true);
            ajax.send();
        }
        document.getElementById("ping").onclick = function(){
            domain = document.getElementById("domain").value;
            updateText(domain);
        }
    </script>
</body>
</html>

ajax.PHP

<?PHP
if (isset($_GET['domain'])) {
    function liveExecuteCommand($cmd)
    {
        while (@ ob_end_flush()); // end all output buffers if any

        $proc = popen($cmd, 'r');

        $live_output     = "";
        $complete_output = "";

        while (!feof($proc))
        {
            $live_output     = fread($proc, 4096);
            $complete_output = $complete_output . $live_output;
            echo "<pre>$live_output</pre>";
            @ flush();
        }

        pclose($proc);
    }   
    $domain =  $_GET['domain'];
    $pingCmd = "ping ".$domain;
    liveExecuteCommand($pingCmd);
}
else{
    echo "No post request";
}
?>

输出

Output_after_Executing

免责声明:

由于我当前正在使用Windows操作系统,因此ping命令已更改.根据您的操作系统进行更新.

作为第一次提问者,您已经对问题进行了巧妙的描述,并展示了解决问题的努力.我真的很感激.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐