【发布时间】:2013-08-01 14:01:05
【问题描述】:
我有一个 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() 方法发送不同的字符串可以正常工作。
【问题讨论】:
-
将链接连接到 AJAX 函数的逻辑在哪里?
-
该逻辑是 Page1.aspx 上的内嵌 Javascript 代码。调用Javascript的LinkButton控件有一个后端调用:_lnkExport.Attributes.Add("OnClick", "return doBenefitExport(" + _parsedBenefit.Id + ");");
-
你能在 xmlhttp.open("Get") 之前做警报吗?在该警报中检查您的 url 是否正确构建并且有效还检查代码实际上是否正确执行到此级别..
-
我已经在 .open() 之前和 .send() 之后进行了调试 Javascript alert() 调用。我在 open() 之前放置的警报显示了我传递给 open() 的 URL,并且显示正确。
-
我还发现,即使离开这个页面并返回,我仍然无法成功拨打电话...
标签: asp.net ajax web-services