【发布时间】:2019-06-28 16:39:20
【问题描述】:
我正在从 XML 文件加载值,然后在 php 页面上使用表单更新 XML。我的问题是这个 - 我有一个在节点上运行计数的查询,它工作得很好,但我也想用计数更新节点并获得准确的值。当我提交我的表单时,它会在我加载文件时提交值,但为了正确更新计数(因为我需要更新的节点计数)我需要提交两次。我试图让它在正文 onload 函数上提交表单,但是从我可以确定当您点击提交按钮时它不会执行真正的整页刷新。它会重新加载页面,但我无法让它实际运行任何脚本或 onload 函数。我想到但无法弄清楚如何实现的替代方法是,如果我将选项值更改为关闭,则计数会减少。
<!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);
}
});
}
});
}
【问题讨论】:
-
您的问题毫无意义,原因如下:您页面的用户只在表单中输入值一次,而不是两次,因此您只需提交一次即可完成您可能想要的所有处理.
-
嗨 KIKO 软件。这实际上是不正确的。加载页面时,通过提升的状态值加载跟踪计数。所以当我点击提交时,它会更新状态值,但计数值仍然相同。为了保存新的计数值,我需要重新提交页面。