为了账号安全,请及时绑定邮箱和手机立即绑定

无需重新加载页面的永久请求

无需重新加载页面的永久请求

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 关注
  • 68 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信