我有一个 ASP.net webforms 应用程序,它有一个客户端单击事件,该事件对调用长时间运行的 Web 服务的页面进行 Ajax 调用 (XMLHttpRequest)。
流程是这样的:
Page1.aspx 点击调用 Page2.aspx 的链接
Page2.aspx 使用委托和 IAsyncResult 来调用 WebService.asmx
WebService.asmx 使用扩展的 BackgroundWorker 在单独的线程上工作
IAsyncResult 调用 BeginInvoke() 然后 EndInvoke()
问题: 第一次单击 Page1.aspx 上的链接可以正常工作 - 页面 1 调用页面 2,页面 2 调用 Web 服务,工作就完成了。
如果我再次单击该链接(WebService 工作完成后),它不会触发 Page2.aspx 应该调用的工作。
当我调试时,我有一个来自 Page1.aspx 的 Javascript 警报,它说调用了 XMLHttpRequest.send() 请求;然而,调试器并没有把我带到 Page2.aspx 页面……事实上,它没有把我带到任何地方。
下面是我的 Ajax 函数的内部: var xmlhttp = null;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "Page2.aspx?SomeQueryString=" + someID, true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
try {
var responseText = xmlhttp.responseText;
document.getElementById("_lblExportStatus").innerHTML = responseText;
}
catch (e) {
alert("Error: " + e.Message);
}
}
}
return false;
编辑 我发现将不同的查询字符串传递给 XMLHttpRequest 对象确实会导致工作完成。问题在于在 Open() 方法中传递完全相同的字符串。向 open() 方法发送不同的字符串可以正常工作。