Я загружаю значения из файла XML, а затем обновляю XML с помощью формы на странице php. Моя проблема заключается в следующем: у меня есть запрос, выполняющий подсчет узлов, который прекрасно работает, но я также хочу обновить узлы с помощью счетчика и получить точные значения обратно. Когда я отправляю свою форму, она отправляет значения такими, какие они есть, когда я загружаю файл, но для правильного обновления счетчика (потому что мне нужен обновленный счетчик узлов), мне нужно дважды отправить его. Я пытался сделать так, чтобы он отправлял форму в функции загрузки тела, но из того, что я могу выяснить, когда вы нажимаете кнопку «Отправить», он не выполняет полное обновление страницы. Он перезагружает страницу, но я не смог заставить ее запускать какие-либо сценарии или функции загрузки. Альтернатива, о которой я подумал, но не могу понять, как реализовать, - уменьшить счетчик, если я изменю значение параметра на закрытое.
<!DOCTYPE html>
<?php
$xml->load('test.xml');
$xpath = new DOMXpath($xml);
$liftsopen = $xpath->query("//node/Lifts-Open")->item(0);
$lift1status = $xpath->query("//areas/area[@name='Lift1']/lifts/lift[@name='Lift1']/@status")->item(0);
$lift2status = $xpath->query("//areas/area[@name='Lift2']/lifts/lift[@name='Lift2']/@status")->item(0);
$liftcount = 0;
foreach ( $xpath->query('//lifts/lift[@status="OPEN"]') as $count1 ) {
$liftcount++;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$lift1->nodeValue = $_POST['lift1statusform'];
$lift2->nodeValue = $_POST['lift2statusform'];
$liftsopen->nodeValue = $liftcount;
$xml->save('test.xml');
}
?>
<body>
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<h4>Lift1</h4>
<select name="lift1statusform" >
<option selected value="<?= htmlspecialchars($lift1status->nodeValue) ?>"><?= htmlspecialchars($lift1status->nodeValue) ?></option>
<option value="OPEN">OPEN</option>
<option value="CLOSED">CLOSED</option>
</select>
<h4>Gondola</h4>
<select name="lift2statusform" >
<option selected value="<?= htmlspecialchars($lift2status->nodeValue) ?>"><?= htmlspecialchars($lift2status->nodeValue) ?></option>
<option value="OPEN">OPEN</option>
<option value="CLOSED">CLOSED</option>
</select>
<input name="submit" type="button" value="Save"/>
</form>
</body>
</html>
использовал следующую функцию Ajax для отправки формы дважды:
function Test() {
var form = $('form');
$.ajax({
type: 'POST',
url: form.attr('action'),
data: form.serialize(),
success: function(data) {
$.ajax({
type: 'POST',
url: form.attr('action'),
data: form.serialize(),
success: function(data) {
location.reload(true);
}
});
}
});
}