XHR和php进度栏,在本地工作,不在远程工作

时间:2018-07-09 09:59:46

标签: php xmlhttprequest progress-bar

更多说明在这里: 我将产品导入到数据库中,每次导入产品时,都会显示先前计算的百分比:

 //Progress bar
    set_time_limit(0); 
    ob_implicit_flush(true);
    ob_end_flush();
    sleep(1);
    $p = ($i/$count_product)*100; //Progress
    $response = array( 'success' => true  , 'message' => $p . '% ','progress' => $p);
    $i++;
    echo json_encode($response);

在我本地,一切正常: enter image description here

每次php echo json_encode()我都会在XHR上获得新的状态3,并显示响应。 下面的代码:

var xhr = new XMLHttpRequest();  
          xhr.previous_text = '';
          $param = 'id='+$(this).find('input').val();                    
          xhr.onerror = function() {console.log(xhr.responseText) };
          xhr.onreadystatechange = function() {
              //try{
                  console.log(xhr.readyState);
                  console.log(xhr);
                  console.log(new_response);
                  if (xhr.readyState == 4){
                      var new_response = xhr.responseText.substring(xhr.previous_text.length);

                      var result = JSON.parse( new_response );
                       if (result['message'] == '100' ) {
                          $('.progress_bar').html('<div><?=$this->translate->_("Imported succefully")?></div>'); 
                          $.when($('.full_screen_layer').fadeOut(2000)).done(function() {
                              location.reload();
                          }); 
                        }else{
                          $('.progress_bar').html('<div style="color:red">'+result['message']+'</div>');
                          setTimeout(function(){
                            $.when($('.full_screen_layer').fadeOut(2000)).done(function() {
                                location.reload();
                            }); 
                          }, 2000);
                          // alert('<?=$this->translate->_("Please try again")?>');
                        }
                  } 
                  else if (xhr.readyState > 2){
                      var new_response = xhr.responseText.substring(xhr.previous_text.length);
                      var result = JSON.parse( new_response );
                      if (result['success'] && result['end'] == undefined) {
                        $('.progress_bar').html('<div>'+result['message']+'</div>');             
                        xhr.previous_text = xhr.responseText;
                      }else{
                        $('.progress_bar').html('<div style="color:red">'+result['message']+'</div>');           
                      }
                  }  
              //}
              // catch (e){
              //     alert("[XHR STATECHANGE] Exception: " + e);
              // }                     
          };
          xhr.open("POST", action, true);
          xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
          xhr.send($param);

但是我试图理解为什么它不能在服务器上工作(在请求结束时,XHR状态3仅被触发一次(因此json格式错误)) enter image description here

以下是标题: enter image description here

如果有人有一个主意,甚至是一个不好的xD,这都会让我感到震惊 (顺便说一句,服务器上有一个代理:VIA:1.1 Alproxy)它可以停止响应,直到响应结束,然后一起发送?

0 个答案:

没有答案