Я относительно новичок в веб-программировании. Я новичок в Javascript, PHP, Ajax и т. Д. Я уже некоторое время ищу в Google простое решение этой проблемы, но уже отказался. Я полагаю, что происходит состояние гонки, но все, что связано с условиями гонки и PHP и Javascript, похоже, имеет индивидуальное решение.
Вот настройки:
У меня есть страница PHP, которая выводит таблицу. В одной из строк в одной из таблиц я заполняю ячейку дополнительной таблицей. Он имеет 5 ячеек, и я хотел бы изменить цвета ячеек, чтобы они отражали уровень сигнала Wi-Fi-карт на машине (в настоящее время есть только две карты). Поэтому после того, как таблица заполнена и идентификаторы ячеек установлены, я вызываю функцию javascript, которая отправляет другой фрагмент кода PHP в cat / proc / net / wireless, анализирует и возвращает уровень сигнала карты, которую я назвал .
Проблема:
Javascript и PHP-код, который анализирует беспроводные карты, получает идентификаторы сот и устанавливает цвета, отлично работает для одной карты. Однако, когда я вызываю функцию Javascript из тега в PHP, только последний вызов делает что-либо. Первый, похоже, ничего не делает.
Я полностью озадачен и исчерпал все мои условия поиска Google ...
PHP код:
<code><?php include('assets/header.inc.php'); ?>
<script type="text/javascript" src="<?php echo _JS_?>/ajax_home_display.js"></script>
<div id="cm_body" onload="return false">
<?php
$ap_intf = rtrim(shell_exec("cat /tmp/config | grep AP_DEV | cut -d'=' -f2"));
$mesh_intf = rtrim(shell_exec("cat /tmp/config | grep MESH_DEV | cut -d'=' -f2"));
$uptime = rtrim(shell_exec("uptime | awk '{print $3}' | cut -d',' -f1"));
function display_status_intf($intf, $name)
{
global $uptime;
$packet_success = "100%";
echo "
<tr>
<td style=\"font-size:14px; font-weight:bold;\"><pre>$intf [$name]
$uptime
$ packet_success
update_interface ( '$ INTF')
«;
}
// Сделать таблицу
echo "
Интерфейс | Состояние сигнала | Время безотказной работы | Успешность пакета |
|
";
?>
<? php include ('assets / footer.inc.php'); ?>
Javascript код:
THRESH1 = -60;
THRESH2 = -55;
THRESH3 = -50;
THRESH4 = -45;
function update_interface(intf)
{
xmlhttpPost("run_interface_status.php","intf="+intf,interface_stat_response);
}
function interface_stat_response(strQuery,strResponse)
{
var sig_st = [];
// Trim response
var test_return = strResponse;
var intface = strQuery.split("=");
var intf = intface[1];
// Get cell ID's, put in an array sig_st
for (i=1;i<=5;i++)
sig_st[i] = document.getElementById("sig_st_"+i+"_"+intf);
// Reset all colors to default
for (i=1;i<=2;i++)
sig_st[i].setAttribute("style", "background-color:transparent");
if (test_return != "err") {
// Set all colors based on the wifi strength
sig_st[1].setAttribute("style", "background-color:red");
if (test_return > THRESH1)
sig_st[2].setAttribute("style", "background-color:orange");
if (test_return > THRESH2)
sig_st[3].setAttribute("style", "background-color:yellow");
if (test_return > THRESH3)
sig_st[4].setAttribute("style", "background-color:green");
if (test_return > THRESH4)
sig_st[5].setAttribute("style", "background-color:green");
}
}
Тяжелый подъем Ajax (если это имеет значение)
function xmlhttpPost(strURL,strQuery,responseFunc)
{
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
responseFunc(strQuery,self.xmlHttpReq.responseText);
}
}
self.xmlHttpReq.send(strQuery);
}
function trim(s)
{
s = s.replace(/(^\s*)|(\s*$)/gi,"");
s = s.replace(/[ ]{2,}/gi," ");
s = s.replace(/\n /,"\n");
return s;
}
Некоторая дополнительная информация: я считаю, что это условие гонки, поскольку Firebug показывает, что были запущены два сообщения, каждое из которых возвращает правильные значения, но когда я ставлю точку останова в начале функции ответа (interface_stat_response ()), Firebug падает только один раз с последними переменными $ intf и $ сила (вещи wifi1).
Также были бы хороши любые общие указатели. Я знаю, что код не очень красивый, но я хочу поправиться: 3