【问题标题】:Jquery/Php returning processing status with Ajax POSTJquery/Php 使用 Ajax POST 返回处理状态
【发布时间】:2015-10-01 14:42:00
【问题描述】:

我正在处理一个处理 Excel 数据的页面。

目前我有一个索引页面,我曾经通过 $.ajax POST 将 JSON 数据(文件名、选定的列、工作表等)提交到 PHP 页面进行处理(使用发布的选择迭代每一行)。但我想从处理页面获得一些进度响应。因为现在,它只是在后台提交和处理所有内容,而不知道是否完成。

有没有办法:

  1. 重定向到处理页面以及 JSON POST 数据,而不是 ajax 发布?

  1. 从一个 PHP 页面返回多个 JSON 响应(如启动、停止、..)并在同一个 $.ajax 成功函数中获取这些响应?添加某种检查功能,例如

如果最后一个响应行 == 开始,则显示图像

..过了一会儿(继续检查 json 响应..),

如果最后一个响应行 == 完成,隐藏图像?

我无法使用表单提交操作,因为我发送的是完整的 JSON 字符串而不是单独的输入值。

我是否在这里忽略了某些东西,或者这是不可能的(以我的处理方式)?

【问题讨论】:

  • 装载机的声音如何?
  • 我想过,但如果是一个有 10k 条记录的 excel 文件,最好看看他当前在哪一行而不是 10 分钟加载?

标签: php jquery json ajax response


【解决方案1】:

您需要使用ajax 调用不同的PHP 文件,从会话中获取进度。我也做过一次,我是这样做的:

Javascript

function getProgress(){
    //console.log("progress called");
    $.get( "getprogress.php", function( data ) {
        //console.log(data);
        var p = data.progress;

        if (p!=100){
            //set your progressbar here
        }

    }, "json");
}

在你开始工作的函数中,你只需设置一个timeout

timeout = setInterval('getProgress()', 1000);

Getprogress.php

ob_start();
session_start();
session_write_close();
$output = array();
$output['progress'] = $_SESSION['progress'];
echo json_encode($output);  

在您进行实际工作的PHP 文件中,您需要像这样设置进度:

session_start();
$_SESSION['progress'] = $progress;
session_write_close();

记得使用session_write_close(),因为会话一次只能在一个进程中打开。

【讨论】:

  • 天才!我会看看这个并试一试!谢谢(可能不是最有效的方法,但是嘿..)
  • 没问题,希望对你有用,当时我搜索了很多,我也认为这不是最有效的方法,但找不到更好的方法:)
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多