我有一个ASP.net webforms应用程序,它有一个客户端点击事件,它对一个调用长期运行的Web服务的页面进行Ajax调用(XMLHttpRequest)。
流程如下:
Page1.aspx点击调用Page2.aspx
的链接Page2.aspx使用委托和IAsyncResult来调用WebService.asmx
WebService.asmx使用扩展的BackgroundWorker来处理单独的线程
IAsyncResult调用BeginInvoke(),然后调用EndInvoke()
问题:点击Page1.aspx上的链接第一次正常工作 - 调用Web服务的第1页调用,工作完成。
如果我再次点击链接(在完成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()方法可以正常工作。
答案 0 :(得分:0)
尝试使用 POST 而不是 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/
希望这会有所帮助
问候
Shaz
答案 1 :(得分:0)
要克服缓存问题,您可以使用时间戳作为唯一标记 - 即:
xmlhttp.open("GET", "Page2.aspx?SomeQueryString=" + someID +
"×tamp=" + (new Date()).toString(), true);