2016-11-07 119 views
0

什么是在等待PHP呈现结果时显示或处理大成功结果的最佳方式。我想用jQuery提交表单,让PHP处理它,并在用户等待时给用户输出/反馈(在div或iframe中...在下面的示例中,我使用iframe)。PHP Streaming和jQuery

我的XHR版本,我在网上找到的骨干,但我不知道是否有更好的方法(我知道有jQuery的混合成这样:

function submitForm(){ 
    $('#report_iframe').attr('src','/tests/stream_ajax/blank_iframe.php'); 
    $("#report_modal").modal({backdrop: "static"}); 

     count=1; 
     xhr = new XMLHttpRequest(); 
     xhr.open("GET", "/folder/ajax_result.php", true); 
     xhr.onprogress = function(e) { 
      count = count +1; 

     $("#report_iframe").contents().find("#content_loader").text('this is jquery count' + count); 
     } 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4) { 
      //console.log("Complete = " + xhr.responseText); 
      // alert("complete"); 

      document.getElementById("report_iframe").srcdoc=xhr.responseText; 
      } 
     } 
     xhr.send(); 



}; 

任何帮助表示赞赏。谢谢。

Ĵ多伊尔

回答

0

反正你正在使用JQuery,你为什么不使用JQuery AJAX?

$.ajax({ 
     cache: false, 
     async: true, 
     type: "GET", 
     url: '/folder/ajax_result.php', 
beforeSend:function() 
{ 
    count = count +1; 
}, 
success:function(response) 
{ 
    document.getElementById("report_iframe").srcdoc=response; 
} 
    }); 
+0

这并不让我像这样的PHP流的负载结果输出的作用: 'xhr.onprogress =功能(E){ 计数= count +1; $(“#report_iframe”).contents()。find(“#content_loader”).text('this is jquery count'+ count); }' 我正在寻找的是一些解决方案,可以让用户对结果有一些进展的想法。 此外,在这两种情况下(我的和你的),如果我再次提交表单,它不执行beforeSend(或似乎)。 – jkdoyle

+0

如果您提交表单,它肯定会再次调用beforeSend。但这将是一个新的例子。 –

0

我@Nandan同意,你应该使用JQuery阿贾克斯,现在的进度反馈的部分,你应该在你的框架中添加事件侦听为XHR对象并将其显示,这将是这样的:

$.ajax({ 

    xhr: function() 
    { 
    var xhr = new window.XMLHttpRequest(); 

    //Download progress 
    xhr.addEventListener("progress", function(evt){ 
     if (evt.lengthComputable) { 
     var count = evt.loaded/evt.total; 
     $("#content_loader").html('this is jquery count ' + count*100); 
     } 
    }, false); 
    return xhr; 
    }, 
    type: 'GET', 
    url: "/folder/ajax_result.php", 
    data: {}, 
    success: function(data){ 
    //Do something 
    } 
}); 

为了更好地解释和详细信息: Click here

Or here


UPDATE: 你可以人所以尝试这样的事情,它可以很好地用于下载进度

$.ajax({ 
    type: 'GET', 
    url: "/folder/ajax_result.php", 
    data: {}, 
    xhrFields: { 
    onprogress: function (e) { 
    if (e.lengthComputable) { 
     $("#content_loader").text("this is jquery count " + e.loaded/e.total * 100 + "%"); 
     } 
    } 
    }, 
    success: function(data){ 
    //Do something 
    } 
}); 
+0

由于某种原因,这不适合我。它提交并获得最终结果,但我没有得到任何计数结果,也没有修改div。 – jkdoyle

+0

试试我编辑的答案,你想显示上传或下载进度? – Moyom

+0

下载。 PHP结果。 – jkdoyle