2016-09-26 76 views
-2

我有一個web服務器。在Web服務器上有一個正在運行的進程正在做某些事情。當進程(或程序)正在運行時,它會發布它正在執行的任務狀態的更新,該狀態應該或多或少地指示它何時完成。 (如狀態欄指示符,例如百分比編號)通過web服務器上的文件顯示jQuery狀態

進程(或程序)將寫入一個名爲busy.html的文件 - 在busy.html中,以下內容將由進程寫入:處理:50%

busy.html位於:http://www.somewhere.com/temp/busy.html例如。

Web服務器上的進程將間歇性地寫入busy.html,直到它達到100%爲止。當達到100%時,busy.html將被刪除。

在網頁上,我希望有一個jQuery代碼,顯示busy.html的內容,以指示Web服務器忙於處理的進程的狀態或進度。

換句話說,Jquery應該輪詢並顯示現有網頁中的busy.html內容,直到busy.html不再存在。

這個樣子的Jquery代碼怎麼樣?也許有更簡單的方法將進度狀態傳遞給jQuery,而不是像文中所解釋的那樣使用文件來指示現有狀態。

更新我的問題:

而且,這會是(使用jQuery)正確的方法來表示服務器上運行的進程的狀態?我想輸入一個受密碼保護的URL,並且加載的網頁應該告訴我服務器上運行的進程的狀態。運行該過程的技術是一個Perl腳本或程序,它正忙於將文件內容編入數據庫。

+0

你就不能從busy.html採取的代碼,並使用它在一個頁面上? – Huangism

+0

http://api.jquery.com/jQuery.ajax/也要小心從本地磁盤讀取文件。如果多個連接嘗試訪問它,它很容易被鎖定。 –

+0

那麼頁面是否有標記可以查找以獲取狀態?你想如何在你的頁面上顯示它? – epascarello

回答

2

您可以使用此代碼:

var place = $('#foo'); 
var delay = 3 * 1000; // 3 seconds 
var url = 'http://www.somewhere.com/temp/busy.html'; 
(function recur() { 
    $.ajax({url: url, success: function(page) { 
     place.html(page); 
     setTimeout(function() { 
      recur(); 
     }, delay); 
    }, error: function() { 
    place.hide(); 
    }}); 
})(); 
0

這裏有你所需要的步驟。

  • 閱讀JQuery的postget方法,看看simple example
  • 裏面的文件準備調用post或get請求(獲取將與您的情況做)和URL將指向busy.html
  • 對此你會得到你的HTML或文本busy.html
  • 裏面寫數據
  • 然後,您可以使用該文本的最後三個字母來獲取百分比,並根據需要顯示圖表,標註或簡單文本。

它並不複雜。

0

如果您的網站位於同一個域(www.somewhere.com),你可以使用load()方法:

// check once each second 
var loading = false; 
var checkTimer = setInterval(function() { 
    if(loading == false){ 
     //alert("nextLoad"); 
     loading = true; 
     $("#progress").load("temp/busy.html", function(response) { 
     loading = false; 
     //alert("loadFinished"); 
     if($(this).html() == "Processing: 100%"){ 
      clearInterval(checkTimer); 
      return true; 
     } 
     }); 
    } 
}, 1000);