Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery/Php使用Ajax POST返回处理状态_Php_Jquery_Json_Ajax_Response - Fatal编程技术网

Jquery/Php使用Ajax POST返回处理状态

Jquery/Php使用Ajax POST返回处理状态,php,jquery,json,ajax,response,Php,Jquery,Json,Ajax,Response,我正在处理Excel数据的页面 目前,我有一个索引页面,其中我曾经通过$.ajax POST将JSON数据(文件名、选定列、工作表等)提交到PHP页面进行处理(使用已发布的选择迭代每一行)。但我想从处理页面获得一些进展响应。因为现在,它只是在后台提交和处理所有内容,而不知道是否完成了 有什么方法可以: 重定向到处理页面,以及JSON POST数据,而不是ajax POST 或 从一个PHP页面返回多个JSON响应(如started、stopped等),并在同一个$.ajax success函数中

我正在处理Excel数据的页面

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

有什么方法可以:

  • 重定向到处理页面,以及JSON POST数据,而不是ajax POST
  • 从一个PHP页面返回多个JSON响应(如started、stopped等),并在同一个$.ajax success函数中获取这些响应?添加一些检查函数,如
  • 如果最后一个响应行==已启动,则显示图像

    …一段时间后(继续检查json响应…)

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

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


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

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

    session_start();
    $_SESSION['progress'] = $progress;
    session_write_close();
    
    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 = 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\u write\u close()
    ,因为一次只能在一个进程中打开会话。

    加载程序听起来如何?我想了一下,但是如果它是一个包含10k记录的excel文件,最好能看到他当前在哪一行而不是在加载10分钟?Genius!我来看看这个,试试看!谢谢(可能不是最有效的方式,但是嘿…)没问题,希望它对你有用,我当时搜索了很多,我也相信这不是最有效的方式,但找不到更好的:)