首先,我不相信我的问题与this重复。调用页面和asmx Web服务位于同一网站中,处于相同的层次结构级别,并且页面具有访问asmx文件的权限。
现在,问我的问题。
我有一个我正在开发的网站,它针对SQL Server执行一些长时间运行的进程。我已经确定标准的ajaxloader.gif不足以满足我的需求,因为任务可能花费不同的时间(15秒到5分钟以上)。
因此,我开发了一个由2个Web服务组成的系统来处理向用户显示的实际进度。第一个Web服务完成工作,更新Service类中的共享变量。第二个Web服务每半秒左右调用一次(有时我将其间隔设置为低至100毫秒)并从共享变量中读取进度值。
现在,这个系统在IE上运行得很漂亮(我正在使用IE9),但似乎在FF和Chrome中完全失败(在Windows和OS X上)。在OS X上的Safari也失败了。
我已经尝试开始学习在非IE浏览器中进行调试,但我在那里苦苦挣扎(这可能就是为什么我无法解决这个问题)。我在JavaScript / jQuery代码中设置断点,但它们永远不会被触发。我在我的JS / jQuery代码中设置了“调试器”区域,那些停止IE,但不要停止FF和Chrome(我认为似乎是“正确”的行为)。所以,我在我的服务代码隐藏文件中设置了断点,它们似乎在3中被触发了大约1次。因此,它并没有完全失败,但它确实失败了很多。正如我所提到的,它在IE上根本没有失败。我已经尝试在FireFox(Windows)上的FireBug中调试它,但我无法从错误代码中获取有用的信息。据我所知,我只是用ErrorText =“error”回复错误。 (没用!)
这是我的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网络编程的新手,也是JavaScript和jQuery的新手,但我试图做好研究并弄清楚这些东西是如何工作的。另外,就像我说的,上面的代码在IE9中运行得非常漂亮(完全符合我的要求)。此外,在非IE浏览器上,很少触发/满足在“Service.asmx / LongRunningProcess”第一行上设置的断点。所以,我不认为代码错误在我的VB.NET代码中,这就是为什么我没有发布它。我有语法错误或其他什么吗?
答案 0 :(得分:0)
据我所知,这只是“回归虚假”;我失踪了。