亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無需重新加載頁面的永久請求

無需重新加載頁面的永久請求

PHP
函數式編程 2023-04-02 10:24:49
我的網絡提供商是 Strato。我想每 10 秒進行一次 mysql select 查詢而不重新加載頁面:Strato 無法使用 Websocket。對我來說,替代方案是 ajax 輪詢。我試過這個:$.ajax({   type: "POST",   url: "ajax/mysqlQuery.php",   data: 'userID=10'}).done(function(result) {      if(result) {         // DO SOMETHING      }})mysql查詢.php<?php$data= null;include("../inc/config.php");while(!$data) {    sleep(10);    $statement = $mysqli->prepare("SELECT * FROM `table` WHERE userID = ?");    $statement->bind_param("s", $_POST["userID"]);    $statement->execute();    $result = $statement->get_result();    while($row = $result->fetch_object()) {        $data[] = array("ID" => $row->ID);    }}echo json_encode($data);?>這很好用。但:Strato 的 php max_execution_time 為 120 秒。我的腳本在 120 秒內運行良好 - 然后就會停止。我該如何解決這個問題?
查看完整描述

1 回答

?
www說

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 代碼中編輯內容,例如檢查結果是否實際上是一個數組等等...


查看完整回答
反對 回復 2023-04-02
  • 1 回答
  • 0 關注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號