У меня есть сценарий bash, который подключается к порту telnet и открывает некоторые диагностические данные и выходит из него и открывает другой порт telnet, чтобы контролировать его, сценарий отлично работает, и я могу выполнить его с помощью jquery и ajax, но у меня возникают проблемы с постоянным обновлением div с помощью результаты Я не хочу, чтобы вызывать одну и ту же команду при перезагрузке php в div, просто обновлять информацию о результатах, а предложения оценивают код ниже
Сценарий bash довольно простой:
#!/bin/bash
{
sleep 2
echo diag gps info
sleep 2
echo exit
} | telnet 10.10.2.1 1700
telnet 10.10.2.1 1800
Файл HTML/PHP:
<!DOCTYPE HTML >
<html>
<head>
<meta charset="UTF-8">
<title>diag stuff</title>
</head>
<body>
<button id="startGpsDiag" >Start gps diag</button>
<div id="results"></div>
</body>
<!-- <script langauge="JavaScript" src="{#javaScriptDir#}/jquery-min-1.8.js"> </script> -->
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
jQuery(document).ready(function () {
jQuery.ajaxSetup({cache: false});
jQuery("#startGpsDiag").click(function () {
// alert('true');
callGpsDiag();
});
function callGpsDiag(){
jQuery.ajax({
type: "POST",
url: "gpsDiag.php",
data: "execGpsDiag=1",
success: function(data) {
alert('success');
jQuery('#results').html(data);
setInterval(function() {
jQuery('#results').html(data);
},3000);
},
error: function() {
// alert('fail');
}
});
}
});
</script>
Файл логики php:
if(isset($_POST['execGpsDiag'])) {
echo system('./gpsdiag.sh');
}
Я могу отредактировать файл bash и удалить последнее соединение telnet, которое я хочу контролировать, и переместить его в php-логику, если мы не изначально устанавливаем диагностику монитора порта
Я также попытался сделать echo system(telnet 10.10.1.2 1800)
и попробовал setinterval
сам по себе просто загрузить порт мониторинга, но не смог получить никаких результатов
если я запустил gpsDiag.php
из командной строки либо с помощью echo system(telnet 10.10.1.2 1800)
либо с помощью echo system('./gpsdiag.sh');
он работает и отображает результаты на экран.
Вам нужно установить тайм-аут и вызвать функцию внутри обратного вызова таймаута.
function callGpsDiag(){
jQuery.ajax({
type: "POST",
url: "gpsDiag.php",
data: "execGpsDiag=1",
success: function(data){
alert('success');
jQuery('#results').html(data);
setTimeout(function(){
callGpsDiag();
},3000);
},
error: function() {
//alert('fail');
}
});
}