2016-11-07 114 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