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

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

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

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

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

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

liveping.php:

Domain/IP Address:

<?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 "

$live_output
";

@ flush();

}

pclose($proc);

}

}

$domain = $_POST['domain'];

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

if (isset($_POST['ping'])) {

liveExecuteCommand($pingCmd);

}

?>

ping.py:

#!/usr/bin/python

import cgi

import os

import sys

ping = "ping -c 5 -W 2 "+sys.argv[1]

os.system(ping)

我尝试过的一些事情:

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();

}

Click Me

Nothing here yet.

要么

var auto_refresh = setInterval(

function ()

{

$('#load_tweets').load('ajax.php').fadeIn("slow");

}, 1000); // refresh every 10000 milliseconds

与ajax.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 "

$live_output
";

@ flush();

}

pclose($proc);

?>

谢谢你的帮助!

解决方法:

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

> index.php将具有AJAX功能以及表单.

> ajax.php将具有用于ping指定域地址的代码.

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

index.php:

Ping AJAX

Domain/IP Address:

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);

}

ajax.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 "

$live_output
";

@ flush();

}

pclose($proc);

}

$domain = $_GET['domain'];

$pingCmd = "ping ".$domain;

liveExecuteCommand($pingCmd);

}

else{

echo "No post request";

}

?>

输出:

yLLtv.png

免责声明:

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

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

标签:ajax,javascript,python,php,jquery

来源: https://codeday.me/bug/20191025/1930635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值