下面的代码可以正常工作,因为它可以正确地更新数据库。但是,在帖子完成后,页面上的数据已经过时,即使它是由SELECT查询驱动的,$reader_busy[0]
也不会更新。
要强制$reader_busy[0]
在用户屏幕上正确更新,需要刷新。这意味着页面会在帖子后重新加载,然后刷新。
如何让页面显示mysql中的正确数据而无需加载页面两次?
我的PHP代码的简化版本:
<?php
$reader_key = 'jm2';
$reader_busy_query = "SELECT `BusyWithClient` " .
"FROM {$wpdb->prefix}assistant " .
"WHERE `Key`='" . $reader_key . "'";
$reader_busy = $wpdb->get_col( $wpdb->prepare( $reader_busy_query ) );
$busy_with_client = $reader_busy[0];
if(isset($_POST['toggle'])){
$result = $wpdb->update(
$wpdb->prefix . 'assistant',
array('BusyWithClient' => $busy_with_client),
array('Key' => $reader_key)
);
// I want to remove / replace this line, and still see updated data.
echo "<meta http-equiv='refresh' content='0; url=" . curPageURL() . "#instructions" . "'>";
}
?>
<h1>
<?php print_r('busy: ' . $reader_busy[0]); ?>
<h1>
<form method="post" action="<?php echo curPageURL() . '#instructions'; ?>">
<input type="submit" name="toggle" value="toggle" >
</form>
答案 0 :(得分:0)
我看到你想要完成什么,而且看起来不可能。您可以(应该)通过仅刷新所需的页面数据来制作ajax请求并更新页面,而不是刷新页面。
编辑:
因为,您尝试使用ANCHOR发布到某个页面,而且那里的浏览器会尝试在不刷新页面的情况下查找页面上的信息。浏览器仍会将信息发送到帖子,因此它会在后台更新,但不会刷新页面。
您应该通过ajax请求发布帖子并将数据返回到字段,或将其发布到另一个php文件(不带#hashtag)。
PS - 如果你降级每个对你不起作用的答案,你就不会得到更多的回答:)
答案 1 :(得分:0)
按照你做事的顺序翻转。而是检索然后更新,在检索之前更新。
!function(root, name, make) {
if (typeof module != 'undefined' && module.exports) module.exports = make()
else root[name] = make()
}(this, 'res', function() {
var one = {dpi: 96, dpcm: 96 / 2.54}
function ie() {
return Math.sqrt(screen.deviceXDPI * screen.deviceYDPI) / one.dpi
}
function dppx() {
// devicePixelRatio: Webkit (Chrome/Android/Safari), Opera (Presto 2.8+), FF 18+
return typeof window == 'undefined' ? 0 : +window.devicePixelRatio || ie() || 0
}
function dpcm() {
return dppx() * one.dpcm
}
function dpi() {
return dppx() * one.dpi
}
return {'dppx': dppx, 'dpi': dpi, 'dpcm': dpcm}
});