首先失敗,我不相信我的問題是this重複。調用頁面和asmx Web服務位於相同的Web站點中,處於相同的層次級別,並且頁面具有訪問asmx文件的權限。
現在,對我的問題。
我有一個網站,我發展,做對SQL Server的一些長期運行的流程。我已經決定標準ajaxloader.gif不足以滿足我的需求,因爲任務可能需要不同的時間(15秒到5分鐘以上)。
所以,我已經開發的2個Web服務的系統來處理呈現給用戶的實際進展。第一個Web服務完成工作,更新Service類中的共享變量。第二個Web服務每半秒左右調用一次(有時我將其設置爲100ms的時間間隔),並從共享變量中讀取進度值。
現在,這個系統精美的作品在IE瀏覽器(我與IE9的工作),但似乎在FF和Chrome(包括Windows和OS X)完全失敗。它也沒有在Safari在OS X
我試着開始學習在非IE瀏覽器來調試,但我掙扎存在(這可能是爲什麼我不知道這一點)。我在JavaScript/jQuery代碼中設置了斷點,但它們從未被觸發。我在我的JS/jQuery代碼中設置了「調試器」區域,而那些停止IE,但不要停止FF和Chrome(我認爲這似乎是「正確的」行爲)。所以,我在我的服務代碼隱藏文件中設置了斷點,並且它們似乎被觸發了大約1次。所以,它並沒有完全失敗,但確實失敗了很多。正如我所提到的,它在IE上並沒有失敗。我試着在FireFox上調試FireFox(Windows),但是我一直無法從錯誤代碼中獲得有用的信息。據我所知,我只是回到錯誤ErrorText =「錯誤」。 (沒有用!)
這裏是我的jQuery代碼:
function LongRunningProcess() {
debugger;
$('#progressBar').show();
$('#progressLabel').show();
var b = $('#<%= startDateTextBox.ClientID %>').datepicker("getDate");
var e = $('#<%= endDateTextBox.ClientID %>').datepicker("getDate");
var bString = (b.getMonth() + 1) + '/' + b.getDate() + '/' + b.getFullYear();
var eString = (e.getMonth() + 1) + '/' + e.getDate() + '/' + e.getFullYear();
var params = '{beginningDateString:"' + bString + '", endingDateString:"' + eString + '"}';
$.ajax({
type: "POST",
url: "Service.asmx/LongRunningProcess",
data: params,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: Returned,
error: ShowError
});
GetProgress();
}
function GetProgress() {
$.ajax({
type: "POST",
url: "Service.asmx/ShowProgress",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: ProgressReturned,
error: ShowError
});
}
function Returned(missing) {
// This code isn't important/doesn't affect my question,
// but it does exist and catch the return in IE
}
function ProgressReturned(progress) {
$('#progressBar').progressbar("option", "value", progress.d.Progress);
$('#progressLabel').html(progress.d.Step + ' (' + progress.d.Progress.toFixed(2) + '%)');
if (progress.d.Progress < 100) {
setTimeout(GetProgress, 100);
} else {
$('#progressBar').progressbar("option", "value", 0);
$('#progressLabel').html('Done.');
$('#progressBar').hide();
$('#progressLabel').hide();
}
}
function ShowError(request, error) {
debugger;
alert(error);
}
我是新十歲上下到ASP.NET Web編程和很新的JavaScript和jQuery的,但我試圖這樣做很好的研究並弄清楚這些事情是如何工作的。另外,就像我說的,上面的代碼在IE9中運行的非常漂亮(完全如我所願)。另外,在非IE瀏覽器上,在「Service.asmx/LongRunningProcess」的第一行設置的斷點很少被觸發/符合。所以,我不認爲代碼錯誤是在我的VB.NET代碼,這就是爲什麼我沒有發佈它。我有語法錯誤還是什麼?
當超時時,IE可能更寬容一些。由於這個原因,它通常不是一個好的想法,有一個長期運行的Web服務。你能把它分解成多個較短的Web服務調用嗎? – jrummell 2011-12-20 13:21:25
不,加上非IE瀏覽器中的錯誤會立即發生。它在任何方面似乎都不是超時問題。另外,不是長時間運行的流程是我們首先使用ajax的原因之一嗎? – mbm29414 2011-12-20 13:23:59
這應該有助於開始使用Firebug進行調試 - http://getfirebug.com/wiki/index.php/Net_Panel。在控制檯和網絡面板中的響應細節中查找錯誤。沒有錯誤信息,很難說這裏可能是什麼問題。 – jrummell 2011-12-20 13:31:52