2010-04-15 39 views
0

我想顯示服務器端過程(實際上是ffmpeg重新編碼)的一些進度信息。 我最好的辦法是在myscript上使用兩個不同的$ .ajax()調用,如下所示:

1)當表單被提交時(這會觸發重新編碼)一個$ .ajax()會開始重新編碼是這樣的:

$.ajax({ 
    type: "GET", 
    url: "runffmpeg.php", 
    data: dataString, 
    success: function(data, textStatus, XMLHttpRequest) { 
      //clearInterval(repeat); 
      location.reload(); 
     }}); 

2)然後,第二$阿賈克斯()調用將開始觀看,導致文件的大小,以便通知進步的遊客,就像這樣:

$.ajax({ 
     type: "GET", 
     url: "checkprogress.php", 
     data: dataString, 
     success: function(data, textStatus, XMLHttpRequest) {     
       $('#submitted').html(data); 
      } 
    }); 

其實這個調用我應該在一個1秒的setInterval第二個時期以顯示進展。

當然,這是行不通的(或者爲什麼我應該發佈它),我找不到同時有2個Ajax調用的任何參考。

+0

你會得到錯誤嗎?什麼不工作? – marcgg 2010-04-15 13:37:32

回答

2

在同一時間有兩個ajax調用是完全可以接受的。 然而,我會不是使用setInterval,因爲如果它需要超過一秒鐘才能返回,最終可能會多次調用checkprogress.php。你最好有成功的方法發起一個新的阿賈克斯請求,也許在超時後,例如:

function checkProg(){ 
    $.ajax({ 
     type: "GET", 
     url: "checkprogress.php", 
     data: dataString, 
     success: function(data, textStatus, XMLHttpRequest) {     
       $('#submitted').html(data); 
       if (/* not yet complete */) { 
       setTimeout(checkProg,500); 
       } 
      } 
    }); 
} 
0

可以同時激活多少個Ajax請求是有限制的。這是依賴於瀏覽器,應該是接近3.我認爲有可能有兩個請求在同一時間活動,但不建議這樣做。

我建議重新設計您的服務器代碼,以立即回覆表單提交,確認接收到該命令。然後使用輪詢來顯示進度。

相關問題