1 回答

TA貢獻1775條經驗 獲得超8個贊
我沒有在您的 JS 代碼中看到任何實際的輪詢,例如。不是setInterval那種東西。要每 10 秒實際運行一次 JS 函數,您應該需要以下內容:
const doRequest = () => {
$.ajax({
type: "POST",
url: "ajax/mysqlQuery.php",
data: 'userID=10'
}).done(function(result) {
if (result) {
// DO SOMETHING
}
});
}
setInterval(doRequest, 1000);
關于 PHP 部分,我認為您的腳本中不需要 a while(!$data){ ... },因為只有在進行 AJAX 調用時才會對其進行評估,因此您實際上可以擺脫它。
我已經修改了您的 PHP 代碼中的一些內容,我將對此進行解釋
<?php
// just leave it alone at the beginning
include("../inc/config.php");
$statement = $mysqli->prepare("SELECT * FROM `table` WHERE userID = ?");
$statement->bind_param("s", $_POST["userID"]);
$statement->execute();
$result = $statement->get_result();
$data = null;
// maybe you can use $result->fetch_assoc() directly instead of returning an object and mapping it back to an associative array
while($row = $result->fetch_object()) {
$data[] = array("ID" => $row->ID);
}
// close the statement for better PHP performances
$statement->close();
// return it
echo json_encode($data);
?>
如果您的腳本將繼續花費超過 2 分鐘的時間來回答,則可能是數據庫出了問題,或者它只是限制了您的腳本的主機
作為旁注,如果您希望從您的 PHP 代碼中獲得一個數組,您也可以設置$data = []為默認值,這樣如果沒有返回任何內容,您將不需要在 JS 代碼中編輯內容,例如檢查結果是否實際上是一個數組等等...
- 1 回答
- 0 關注
- 137 瀏覽
添加回答
舉報