好吧,我需要發送一個大的請求到運行ASP :: PERL的服務器,並讓服務器發回到調用頁面。基本上 - >告訴服務器將一大堆文件上傳到文件共享中,然後在每個文件檢查錯誤/上傳/成功或失敗時更新客戶端上的div。jQuery的ASP反向回調頁面
有沒有把一些回調函數在後端ASP頁面調用客戶方的加載頁面的JavaScript函數的方法嗎?這必須在服務器上循環工作,所以基本上是從服務器到客戶端的pingback,因爲每個文件都被上傳,直到所有文件被檢查/上傳。
好吧,我需要發送一個大的請求到運行ASP :: PERL的服務器,並讓服務器發回到調用頁面。基本上 - >告訴服務器將一大堆文件上傳到文件共享中,然後在每個文件檢查錯誤/上傳/成功或失敗時更新客戶端上的div。jQuery的ASP反向回調頁面
有沒有把一些回調函數在後端ASP頁面調用客戶方的加載頁面的JavaScript函數的方法嗎?這必須在服務器上循環工作,所以基本上是從服務器到客戶端的pingback,因爲每個文件都被上傳,直到所有文件被檢查/上傳。
你可能從這個post得到一些里程。話題是大量的電子郵件,但該戰略將針對您的要求工作..
好吧,我以前的想法和測試是一個nogo,讓我試試這個。感謝Sky的代碼 - 我將會對它進行測試,看看它是否能解決我的問題。當然,現在我需要在PERL中編寫Web服務 - 但那是另一個問題。 – 2010-02-15 21:19:31
像上面的評論說,(我敢肯定),你有投票要做到這一點。
當您將文件發送到服務器,使用setTimeout()函數註冊一個回調函數。這個函數將「輪詢」服務器,詢問操作的狀態(有多少文件......完成了多少%)。如果操作沒有完成,只需在函數完成之前重新註冊相同的函數 - 再次使用setTimeout()。
var callback = function() {
// (1) Use ajax to get status from the server
// (2) Update the progress div
// (3) If complete, signal the user and hide the progress bar; otherwise register callback() again
}
var submitFiles = function() {
// Send files to server
setTimeout(callback, 1000);
}
我不認爲投票會對我不利。我列出客戶端頁面上的每個文件,並且用戶想知道每個文件的狀態,而不僅僅是整個事務的狀態。但是我不能發送每個文件並且傳統地處理,因爲我將在一個充滿圖紙的大目錄中擊敗服務器而死亡。這是一個破解這個問題的堅強後盾。 – 2010-02-15 15:55:04
感謝您的所有幫助人員。我想出瞭如何去做我們需要的。它歸結爲的是我們想要拖延每個文件的調用,這樣我們就不會用一大堆文件上傳調用壓倒我們的後端服務器。因此,我們選擇了基本上進行異步調用的遞歸策略,然後等待成功回調並處理結果 - 然後再次調用該方法。這裏是一些代碼:
function doAjaxCall(targetCheckBox)
{
if ((targetCheckBox) == 'undefined' || targetCheckBox == null)
{
targetCheckBox = $('#toprint input:checkbox[id*=ChkIn]:checked:first');
if ($(targetCheckBox).length == 0)
{
alert('All Files Processed!');
if (!CheckForm()){
$('#checkinbtn').remove();
} else
{
$('#checkinbtn').removeAttr('disabled');
$('#checkinbtn').val('Check In');
}
return;
}
}
var res = $(targetCheckBox).val().split("/");
var targetID = res[res.length-1];
var test = document.getElementById('comment_'+targetID);
var commentField = $(test);
$.ajax({
type: "POST",
url: "loadfiles.asp",
data: getPostString($(targetCheckBox).val()),
success: function(result) {
if (result.indexOf('Error')> -1){
commentField.attr('style', 'background-color:#FF6267');
} else {
commentField.attr('style', 'background-color:#88CC55');
}
commentField.empty();
commentField.html(result);
$(targetCheckBox).remove();
doAjaxCall(null); // recurse on success until we don't have any more files
}
});
$("#fileCounter").remove();
}
這是一個有趣的話題。我個人會通過讓客戶端輪詢服務器來解決這個問題,服務器定期更新一些狀態表(或其他)。但我會看看別人有什麼要說的。 – Pointy 2010-02-15 15:31:21
Ooo ...我想知道是否可以將最初的「POST」目標設爲隱藏的iframe,然後服務器將會發送一系列「腳本」塊。每個腳本塊都是完整的,並且只包含一個函數調用,以便更新狀態的父頁面中的某些內容。也許瀏覽器會解析並執行腳本標記,即使整個頁面尚未完成。 – Pointy 2010-02-15 15:33:34
是的,什麼尖的說..... – 2010-02-15 15:33:39