您好,我正在嘗試創建一個系統,以便在我的資料庫上的值是 1 我的索引頁面重繪 。這是我的代碼!所有 PHP 代碼都有效,只有我的 index.php 沒有重繪 。
索引.php
<script>
inverval_timer = setInterval(function update() {
$.get("base_de_dados/update/loadMensagens.php", function(data) {
$("#numseiCategoria").html(data);
window.setTimeout(update);
})
}, 5000);
</script>
loadMensagens.php檔案
<?php
include_once '../bdados.php';
$fila = $conn->query("SELECT * FROM tickets_update");
while($Filas = $fila->fetch_assoc()){
$condicao = $Filas['condicao'];
}
if($condicao == 1){
$condicao = 0;
$queryAtualizar = $conn->query("UPDATE tickets_update SET condicao='$condicao'");
echo "
<div id='a'></div>
<script>
$.ajax({url:'updateMensagens.php', success:function(result){
$('#a').html(result)
}});
</script>";
}
?>
updateMensagens.php
<script>
$(document).ready(function(){
location.reload();
});
</script>
uj5u.com熱心網友回復:
您的頁面未重新加載的原因一目了然。首先,包裝在 .ready() 中的 reload 方法可能會阻止它被呼叫,因為我相信 ready 事件只會在 DOM 首次加載時觸發。
$(document).ready(function(){
location.reload(); // Will never fire if script is added to DOM after initial load.
});
但我認為還有另一個問題,因為您的代碼只是附加了這個 HTML ...
<div id='a'></div>
<script>
$.ajax({url:'updateMensagens.php', success:function(result){
$('#a').html(result)
}});
</script>";
...到#numseiCategoria 的內部文本的末尾,這可能不會讓瀏覽器執行腳本(我假設 jQuery 的 .html() 在這里基本上是 innerHTML 的別名,我懶得去去檢查)。
但是,就良好實踐而言,還有更多......
updateMensagens.php 似乎是難以置信的多余,除非它比你展示的更多。讓我們考慮一下您打算如何作業,忽略您向頁面添加腳本的方法不正確這一事實。
您在 index.php 中有主腳本,它向 loadMensagens.php 發送獲取請求,后者執行一些資料庫操作。到目前為止一切順利...您的 PHP 腳本然后回顯一些 JS,您的主腳本將其附加到頁面。此 JS 告訴客戶端發送另一個獲取請求,這次是發送到 updateMensagens.php,并再次將結果附加到頁面。第二個請求只回傳一個腳本,告訴瀏覽器重新加載頁面。現在我們遇到了問題。
這是一種非常尷尬和冗長的方法來解決這個問題,尤其是當你試圖將這種方法擴展到更大的專案時。您正在嘗試使用 PHP 執行某些使用 JS 更容易完成的操作。我將簡要地為您強調幾件事。
首先,像那樣將 HTML 回顯給客戶端不是很好,它很快就會變得非常笨重。將任何必要的資料作為 JSON(或類似格式)回傳到前端并使用 JS 處理生成 HTML 會更清晰。jQuery 使生成復雜檔案變得相當容易,因為您已經在使用它了我推薦這種方法。
其次,這種使用 ajax 請求從服務器獲取腳本以附加到頁面以使用 JavaScript 執行簡單操作的系統是惡魔般的。請查看我未經測驗的凌晨 4 點替代方案。
索引.php
<script>
inverval_timer = setInterval(function update() {
$.get("base_de_dados/update/loadMensagens.php", function(data) {
let res = JSON.parse(data);
if(res.condiciao === true) {
location.reload();
}
});
}, 5000);
</script>
loadMensagens.php檔案
<?php
$return = [];
include_once '../bdados.php';
$fila = $conn->query("SELECT * FROM tickets_update");
while($Filas = $fila->fetch_assoc()){
$condicao = $Filas['condicao'];
}
if($condicao == 1){
$return['condicao'] = true;
$condicao = 0;
$queryAtualizar = $conn->query("UPDATE tickets_update SET
condicao='$condicao'");
echo json_encode($return);
} else {
$return['condicao'] = false;
echo json_encode($return);
}
作為附錄,您似乎錯誤地使用了 setTimeout 。一方面,我很確定該方法應該接受 2 個引數,但另一方面,我不確定為什么要使用它。
晚安。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535762.html
上一篇:MVC表單資料無法系結到模型
