- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我查看了一些问题,即
似乎没有人回答我的问题,其中一部分似乎是“我该怎么做?”另一半是“嘿,我现在这样做的方式 - 这是最好的方式吗?我可以更好地编码吗?”
我有一个简单的 ajax 脚本,它将一些数据发送到 PHP 脚本:
$.ajax({
type: 'POST',
url: 'analysis.php',
data: { reportID:reportID, type:type, value:value, filter_type:filter_type, filter_value:filter_value, year:year },
success:function(dataReturn){
analysis_data = JSON.parse(dataReturn);
/* do stuff with analysis_data... */
});
这个 PHP 脚本运行大约需要 3 分钟,因为它循环访问数据库并运行一些非常复杂的查询:
<?php
session_start();
ob_start();
ini_set('max_execution_time', 180);
$breaks = [ 1000, 2000, 4000, 6000, 8000, 10000, 20000, 50000, 99999999 ];
$breaks_length = count($breaks);
$p = 0;
foreach ( $breaks as $b ) {
$p++;
$percentage_complete = number_format($p / $breaks_length,2) . "%";
$sql = "query that takes about 20 seconds to run each loop of $b....";
$query = odbc_exec($conn, $sql);
while(odbc_fetch_row($query)){
$count = odbc_result($query, 'count');
}
$w[] = $count;
/* tried this... doesn't work as it screws up the AJAX handler success which expects JSON
echo $percentage_complete;
ob_end_flush();
*/
}
echo json_encode($w);
?>
所有这些都有效 - 但我真正想做的是在每个 foreach
循环之后找到一种方法,将 $percentage_complete
输出回用户,以便他们可以看到它正在工作,而不是仅仅坐在那里 2 分钟,看着 FontAwesome 图标在他们面前旋转。我尝试使用 ob_start(); ,但它不仅在页面运行完成之前不会输出任何内容,而且还会回显该值,该值是发送回我的 AJAX 成功处理程序的一部分,导致它搞砸了。 (我需要 JSON_encoded 格式的输出,因为我稍后会将其用于其他用途。)
到目前为止,在我读过的线程中,我唯一的想法是在上一页上启动 $breaks
数组循环,因此我不是在同一页上循环 6 次,而是循环一次,返回答案,然后使用 $breaks 数组的第二个元素再次调用analysis.php,但我不确定这是最好的方法。
此外 - 在用户等待此脚本执行的 3 分钟内,他们无法在页面上执行任何其他操作,因此他们只能坐下来等待。我确信有一种方法可以让这个脚本以一种不会为用户“锁定”服务器其余部分的方式执行,但是我在 Google 中搜索的所有内容都没有给我一个好的结果回答这个问题,因为我不确定要搜索什么......
最佳答案
您遇到的是所谓的Session Locking 。所以基本上 PHP 不会接受另一个使用 session_start()
的请求,直到第一个请求完成。
立即解决您的问题的方法是从第 #1 行完全删除 session_start();
,因为我发现您不需要它。
现在,对于有关在屏幕上显示百分比的问题:
analysis.php(已修改)
<?php
ob_start();
ini_set('max_execution_time', 180);
$breaks = [ 1000, 2000, 4000, 6000, 8000, 10000, 20000, 50000, 99999999 ];
$breaks_length = count($breaks);
$p = 0;
foreach ( $breaks as $b ) {
$p++;
session_start();
$_SESSION['percentage_complete'] = number_format($p / $breaks_length,2) . "%";
session_write_close();
$sql = "query that takes about 20 seconds to run each loop of $b....";
$query = odbc_exec($conn, $sql);
while(odbc_fetch_row($query)){
$count = odbc_result($query, 'count');
}
$w[] = $count;
/* tried this... doesn't work as it screws up the AJAX handler success which expects JSON
echo $percentage_complete;
ob_end_flush();
*/
}
echo json_encode($w);
check_analysis_status.php获取此文件的百分比
<?php
session_start();
echo (isset($_SESSION['percentage_complete']) ? $_SESSION['percentage_complete'] : '0%');
session_write_close();
一旦您的 AJAX 调用了 analysis.php
,那么只需调用这段 JS:
// every half second call check_analysis_status.php and get the percentage
var percentage_checker = setInterval(function(){
$.ajax({
url: 'check_analysis_status.php',
success:function(percentage){
$('#percentage_div').html(percentage);
// Once we've hit 100% then we don't need this no more
if(percentage === '100%'){
clearInterval(percentage_checker);
}
}
});
}, 500);
关于javascript - 允许执行时间较长的 PHP 脚本将更新发送回浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38904977/
我有一个 ASP.NET 网站,我希望只允许 AD 组中的用户访问该网站。我正在使用如下的 web.config 片段,但这似乎不起作用:
仅当选中所有框时才应禁用“允许”按钮。我该怎么做?我已经完成了 HTML 部分,如下所示。如何执行其中的逻辑部分?即使未选中一个复选框,也应禁用“允许”按钮
当前有一个Navigator.push(context,route),但是上下文部分返回了错误,在尝试调试后,我发现问题是因为我在调用一个函数而不是直接将home设置为widget树。但是现在我不确定
这是我的邮政编码正则表达式 ^[a-zA-Z0-9]{1,9}$ 但不允许 A-12345。如何更改 - 也将被允许的正则表达式? 最佳答案 在字符集的开头或结尾添加-([...]): ^[-a-zA
我目前正在建立我的网站,但遇到了一个问题 JavaScript 中的混合内容阻止 当我尝试加载和显示来自 的图像和页面时,Chrome、Mozilla 和 Explorer 会发生这种情况http 我
我见过使用: [mysqld] bind-address = 255.112.324.12 允许远程访问单个 IP。我如何允许从 mysql 远程访问所有 IP? 最佳答案 如果你想允许它用于所
我想知道是否可以使用模板实现某些功能。我想要做的是允许特定的“复制构造函数和赋值运算符”从一个模板到另一个模板并禁用其他模板。 我想我只完成了一件我想要的事情,所以我提供了下面的类(class)。对于
这个问题在这里已经有了答案: How to validate an email address in PHP (15 个答案) 关闭 2 年前。 正则表达式让我大吃一惊。我如何更改此设置以验证带有加
解析可以采用以下格式之一的日期的最佳方法是什么 "dd-MM-yyyy HH:mm" "dd/MM/yyyy HH:mm" "dd.MM.yyyy HH:mm" 无需创建 3 个 SimpleD
我们知道,下面的代码格式不正确,因为成员 x 在依赖的基类中。但是,将指定行上的 x 更改为 this->x 将修复错误。 template struct B { int x; }; tem
如果能帮助我理解“Java 并发实践”中的以下内容,我将不胜感激: Calling an overrideable instance method(one that is neither privat
此时如果上传一个不在预定义的安全扩展名列表,如.lrc,会报错: File type does not meet security guidelines. Try another. 解决此问题有
我有一个运行韵律,可以为我的几个域和一个 friend 域处理 XMPP。我 friend 域中的一位用户(他的妻子)想更改她的密码(实际上她忘记了她,所以我会用 prosodyctl 设置一个,然后
使用 nginx,您可以允许和拒绝范围和 ips (https://www.nginx.com/resources/admin-guide/restricting-access/)。使用realip模
什么是一些好的克里金法/插值想法/选项,可以让重度权重的点在绘制的 R map 上的轻权重点上流血? 康涅狄格州有八个县。我找到了质心并想绘制这八个县中每个县的贫困率。其中三个县人口稠密(约 100
我正在使用 virtualbox + ubuntu + vagrant . 但是我不能ping或 wget任何网址。请指导我如何允许虚拟机访问我的主机的互联网? 最佳答案 这对我有用。 使用此配置 V
标题可能有点令人困惑,所以让我向您解释一下。 在 Swift 中,我们可以拥有带有默认参数值的函数,例如: func foo(value: Int = 32) { } 我们也可以有 In-Out 参数
有TextView1 和TextView2。 TextView2 应该 float 在 TextView1 的右侧。只要两个 TextView 的总宽度不使 TextView2 与右侧的框重叠,Tex
使用 Magento 收集方法 addFieldToFilter 时是否可以允许按 NULL 值进行过滤?我想选择集合中具有自定义属性的所有产品,即使没有为该属性分配任何值。 最佳答案 您不需要使用
我正试图从 .htaccess 文件中的规则中“排除”一个目录(及其所有文件夹)... 不确定这是否可能? .htaccess 文件是这样的: Order Allow,Deny Deny from a
我是一名优秀的程序员,十分优秀!