0

我有一个 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() 方法发送不同的字符串可以正常工作。

4

2 回答 2

0

如果仍然无法正常工作,请尝试使用POST而不是 OF GET ,然后使用

jQuery 直接调用 ASP.NET AJAX页面方法或直接使用调用web 服务

 $.ajax({
 type: "POST",
 url: "Page2.aspx?SomeQueryString=" + someID, true);
 data: "{}",
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 success: function(msg) {
  // Do something interesting here.
 }
 });

链接:[更多信息]

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

希望这可以帮助

问候

沙兹

于 2013-08-01T15:03:21.210 回答
0

为了克服缓存问题,您可以使用时间戳作为唯一令牌 - 即:

xmlhttp.open("GET", "Page2.aspx?SomeQueryString=" + someID + 
"&timestamp=" + (new Date()).toString(), true);
于 2013-08-01T15:06:55.940 回答