ASP.net AJAX Call在第二次点击时不起作用

时间:2013-08-01 14:01:06

标签: asp.net ajax web-services

我有一个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()方法可以正常工作。

2 个答案:

答案 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 + 
"&timestamp=" + (new Date()).toString(), true);