高手幫忙解決在一個模態對話框中使用了AJAX open GET ASPX頁面出現的問題!

风里有梦 2006-12-22 05:08:20
在一個 模態對話框A 中使用了AJAX open了一個GET的 ASPX頁面B, 在那個 ASPX頁面B 的 Page_Load 中我處理生成XML的過程,但那個過程可能需要花費1~10分鍾之久,問題也因此產生:

如果這個時候我關閉 模態對話框A (XmlHTTP對象已發送了open方法的GET請求, 生成XML數據的過程正在處理中...), 再次打開這個 模態對話框A. 我的程序就死機了!!!( 也不是死機,我猜可能是GET請求并沒有關閉,所以才有此問題 )

請教大蝦幫忙解決! 萬謝!

...全文
171 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cat_hsfz 2006-12-23
  • 打赏
  • 举报
回复
既然已经用AJAX,就没必要modal dialog了吧?直接用div模拟一个modal dialog就行咯,然后也就可以实现一些复杂的规定,例如用户关闭该modal dialog时如何终止后台的请求。
风里有梦 2006-12-23
  • 打赏
  • 举报
回复
up again~
风里有梦 2006-12-23
  • 打赏
  • 举报
回复
up
风里有梦 2006-12-23
  • 打赏
  • 举报
回复
感谢幕白兄回贴!在open方法内我已使用了异步,另接收的函数也和你的一样。
在后台接收数据的那个方法不错!多谢了!

我现在把我的代码贴出来,请大家多多指点.

主要导致问题的代码就是"5. MAKE XML C# CODE"下:

DataTable tblPABInfo = PortfolioViewController.LoadPABInfo( rts, pabCode, pabType ); // 就这一个过程可能需要1-10分钟左右才能完成!!!

这个过程生成一个DataTable, 为何如此耗时呢? 是因为LoadPABInfo方法是调用于我的另一个CLASS内远程主机80端口基于.NET Remoting Windows Service中获取数据并处理. 大家能否就是在当我调用FreeReq()时,终止这个过程?

我的ASPX JAVASCRIPT代码:

1. 发出GET请求:

xmlHttp.onreadystatechange = LoadUpdates;
xmlHttp.open( "GET", "./PAB_Handler.aspx?pabCode=<%=_pabCode %>&pabType=<%=_pabType %>", true );
xmlHttp.send( null );
SetWaitStatus(true);

2. 获取数据:

if ( xmlHttp.readyState == 4 )
{
var response = xmlHttp.responseXML;
if( response.childNodes == null || response.childNodes.length == 0 )
{
return;
}

var updatesNode = response.firstChild;

// recieving data....

SetWaitStatus(false);
}

3.释放资源:
function FreeReq()
{
if ( xmlHttp == null ) return;
xmlHttp.abort();
xmlHttp= null;
delete xmlHttp;
}

4. invoke:

<body onload="GetUpdates();" onunload="FreeReq();">
<form id="Form1" runat="server">

5. MAKE XML C# CODE:

public partial class PAB_Handler : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e )
{
string pabCode = (string) this.Request.QueryString["pabCode"];
string pabType = (string) this.Request.QueryString["pabType"];

if ( pabCode == null || pabCode.Length == 0 ||
pabType == null || pabType.Length == 0 )
{
return;
}

RealtimeReceiever rts = (RealtimeReceiever) this.Session["PABInfo"];
DataTable tblPABInfo = PortfolioViewController.LoadPABInfo( rts, pabCode, pabType ); // 就这一个过程可能需要1-10分钟左右才能完成!!!

System.Data.DataSet ds = new System.Data.DataSet( "Root" );
ds.Tables.Add( tblPABInfo );

Response.Buffer = true;
Response.CacheControl = "no-cache";
Response.ContentType = "text/xml";
Response.Clear();
Response.Write( ds.GetXml() );
Response.End();

tblPABInfo.Clear();
tblPABInfo.Dispose();
ds.Clear();
ds.Dispose();
}
}
cpp2017 2006-12-22
  • 打赏
  • 举报
回复
XMLHTTP可以考虑使用异步
xmlHttp.Open(method,url,true);//这里用true

xmlHttp.onreadystatechange = myFunction();


..
function myFunction()
{
if(gXmlHttp.readyState !=4) return;
//状态为4表示处理完毕,正常返回.

...
代码.
}



另外.在后台.处理数据中在循环中加上.

if(!Response.IsClientConnected)
{
//退出处理
Response.End();
}
风里有梦 2006-12-22
  • 打赏
  • 举报
回复
沒人知道嗎? 在線等待....
风里有梦 2006-12-22
  • 打赏
  • 举报
回复
是一個遠程從我們的數據主機中獲取數據并處理... 就因為這個程慢我才用XMLHTTP在後台接收數據并FILL到表格中. 但是沒想到雖然解決了卻引發了一個這樣的新問題:(

大家能給出什麼好的解決方案嗎? 就是在關閉這個 模態對話框A 時, 順便也終止那個生成XML的過程. 或是其它更理想的方法. 謝!!!!!!!!
triffang 2006-12-22
  • 打赏
  • 举报
回复
1~10分鍾,那么夸张,你写了什么在那里!
QQMagicer 2006-12-22
  • 打赏
  • 举报
回复
那个声称XML的过程太久了,怎么会用那么长的时间呢?贴出来看看吧

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧