【问题标题】:Chrome stops reading JSON file during PHP script executionChrome 在 PHP 脚本执行期间停止读取 JSON 文件
【发布时间】:2013-01-19 18:59:49
【问题描述】:

我需要为长时间运行的 PHP 脚本创建进度条,所以我决定将脚本进度写入 json 文件,然后通过 Javascript 读取它。在 Firefox 中一切正常,但如果我将浏览器更改为 Chrome,它将停止工作。控制台窗口中没有错误。当用户启动 PHP 脚本时,Chrome 会停止加载 json 文件,但它会在 PHP 执行开始之前读取此文件。 是我的代码问题还是 Chrome 浏览器的正常行为?

PHP:

$fp = fopen($this->writeFile, "w");
fwrite($fp, json_encode($values));
fclose($fp);

//for safety we will make a copy and let client access the copy.
copy($this->writeFile, $this->readFile);

Javascript:

getProgress();
function getProgress() {
    $.ajaxSetup({ cache: false });
    $.getJSON("../../../../upload/status.json", function(data) {
    var pbvalue = 0;
    if(data){
        var total = data['total'];
        var current = data['current'];
        if(total != 0)
            pbvalue = Math.floor((current / total) * 100);
        $(".progress-bar .indicator").width(pbvalue+"%");
        $(".progress-text").text(current+"/"+total);
    }
    if(pbvalue < 99)
        setTimeout("getProgress()", 3000);
});
}

JSON 文件:

{"total":"0","current":"0"}

编辑 1: 感谢超时提示,但它在 Firefox 中工作(良好)问题是在我开始 PHP 执行之后 Chrome 控制台内没有“XHR 完成加载”响应(在它按预期每 3 秒加载文件之前)

编辑 2: 这个问题的原因可能是我在用户提交表单后尝试读取这个 JSON 文件。我猜由于某些原因,表单提交后 Chrome 不再允许执行 jQuery $getJSON 函数。任何解决方法将不胜感激。

【问题讨论】:

  • PHP 文件可能超时。试试看:set_time_limit(0);
  • 只是附注,不要将字符串传递给setTimeout,它使用eval。传递函数。 setTimeout(getProgress, 3000);
  • 我按照您的链接尝试了 --disable-web-security 但这并不是我的问题,因为在我的情况下,Chrome 中的 Javascipt 甚至没有尝试获取 json 文件。看起来它在 PHP 执行期间冻结了。
  • 所以要明确一点:在 FF 上一切正常。在 Chrome 上,它仅在您运行 PHP 脚本之前有效。那是对的吗?此外,它在“网络”选项卡下显示什么? (请求被取消了吗?它是空白的吗?)

标签: php javascript json google-chrome


【解决方案1】:

我什至尝试制作读取 json 文件的 flash 动画,但它也不起作用(看起来像在提交 Chrome 之后停止更新当前显示的页面)。 对我来说,唯一可行的解​​决方案是重新设计代码并通过 ajax 调用而不是传统的表单提交来执行 PHP 函数。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多