AJAX设置DIV的innerhtml的问题 AJAX动态获取邮件的内容并显示到DIV中,一般的都比较正常,现在有个问题。当邮件内容是个ASPX页面的内容时就会出错,而且报的"Unknow Error".但是如果把这个邮件内容通过后台.cs中的代码来设置到div的innerhtml就没问题,但这样就会刷新页面,是我不想的。大家有没有碰见过这样的问题,帮帮忙。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面这个是邮件的内容,因为有点大,CSDN有字数限制。所以就上传了下,大家帮忙看看-------------------http://www.cnblogs.com/Files/BearsTaR/1.rar 是取不到内容还是取到内容后设置innerHTML时有问题? 你把后台的邮件内容解析成xml然后通过异步回调传到页面,赋给div的innerhtml To avisnet(第十维度) :能取到内容,就是在付值的时候出错了 to:ustbwuyi() 你可能没看清楚我的问题!!! 给个例子 服务器端: protected string FormatMessage( MessageBox messages ) { if ( messages.Messages.Count == 0 ) return ""; string temp = ""; ArrayList messageId = new ArrayList(); foreach ( MessageRecord i in messages.Messages ) { temp += "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\">"; temp += "<tr>"; temp += "<td align=\"left\" width=\"100%\">"; if ( i.ReceiveOrSend == false ) temp += i.ChatTo + "对我说:"; else temp += "我对" + i.ChatTo + "说:"; temp += i.SendTime + " </td>"; temp += "</tr>"; temp += "<tr>"; temp += "<td width=\"100%\" align=\"left\"><font color=\"#C66FFF\">"; temp += i.Content + " </font></td> </tr> </table>"; messageId.Add( i.ID.ToString() ); MinId = i.ID; string[] dd = new string[5]; } return temp; return ""; } public void RaiseCallbackEvent( string Max ) { MessageManager.UpdateIsRead( MaxId ); } 客户端: <script type="text/javascript" language="javascript"> function <%#this.ClientID%>_CallBack(){ <%# Page.ClientScript.GetCallbackEventReference( this, "", this.ClientID + "_GetResult", "")%>; } function <%#this.ClientID%>_GetResult(result){ if(result!="") { document.getElementById("messageSession1").innerHTML+=result; } } i=window.setInterval("<%#this.ClientID%>_CallBack()",1000); </script> 晕死了 看你的题目真不明白你到底问题是啥你是用AJAX直接去读信息了么?我觉得还是 AJAX只负责更新DIV 而DIV的内容靠后台代码解决,别用脚本改DIV的内容只要让AJAX更新DIV这个区域就可以了 楼上的说得很有道理,我的例子就是这样处理的,异步回调负责更新table,内容来自于后台,而脚本更新table的innerHTML,然后用setInterval不断更新.... 大家看清楚我的问题,我的重点不是AJAX的使用,主要的问题是我要显示的内容,如果是一般的内容就都没问题,比如ustbwuyi() 给的例子中的代码就是一般的内容。而当要显示的内容是整1个ASPX页面的内容的时候,就会出错。大家可以下载http://www.cnblogs.com/Files/BearsTaR/1.rar然后用JS把这个内容显示在DIV里面看看会不会出错。----------------------------------再次声明:问题的重点是要显示的内容很特别。 哦...原来这样,不用试也知道显示在div肯定会有错,相当于把html标签什么的都包到div了,这样的话确实有点郁闷..你传过来的是html源代码吧,如果是这样的话可不可以把它的那些<html><body>这些标签去掉再传过来呢? 但是问题是,为什么用后台的.cs代码把它显示在DIV中就一切正常了。你可以试试在ASP:BUTTON下click时间下读取内容并付值到DIV的innerhtml中就一切正常了。 你直接把它拷贝在<div></div>中间也照样不出错误(其实哪是什么不出错误呀,明明是ie对很多错误都直接忽略,以免太技术化吓坏、烦坏一般群众),但是使用脚本命令的innerHTML属性来赋值才出错。 要注意,虽然在ie上不出错,并不意味着这就符合现在所谓web标准(这是一个web标准上学究的习惯越来越盖过位用户着想的实践者的意见的时代),因此很多浏览器都会出错,甚至ie新版本都可能不允许此类写法。尽管不出错,并不意味着内部的东西能够正常显示。最终还是放在服务器端并且用iframe中显示比较正常。 用iframe不行啊,我那么多邮件,不可能每个邮件生成1个静态页面啊!!! Q:用iframe不行啊,我那么多邮件,不可能每个邮件生成1个静态页面啊!!!——————————————————————————————————————————A:你可以用一个aspx读取邮件,然后Response.Write其内容。没有要你生成静态页面啊。 我刚开始也想的用iframe,不过后来觉得到时候会有点问题,不过还是可以一试 sp1234(没有心情,没有心情短语) 严重同意你!!!!把ASPX页的内容显示到DIV中这根本就是非常错误的想法!!!ASPX输出的内容要用来显示!有以下办法1:让ASPX页输出标准数据,而不是输出HTML页.比如直接写成XML或者自己定义的数据流.(有些站点的防图片盗连就是这样,让一个ASPX页根据参数输出图片字节流)2:你自己去分析ASPX页的HTML代码,去除标记语言,自己抓出数据!3:动态WINDOW,或者MOD窗口,嵌入试IFRAME等等办法.其实最好的多站多页面数据整合还是RSS\XML或者是WEBSERVCES 在页面赋值前,把innerhtml的冲突内容进行转义即可如“<”替换为“<”,“>”替换为“l>” 请将要输出的内容按下面的格式<![CDATA[ "这里放您的内容" ]]> Q: 在页面赋值前,把innerhtml的冲突内容进行转义即可请将要输出的内容按下面的格式<![CDATA[ "这里放您的内容" ]]>————————————————————————————————————————————A: 难道要显示html源代码?不是的,是要显示网页经过浏览器解释后的ui界面。 AJAX本来就是前台的东西,如果要用后台去更新还用AJAX干吗。 aspx里面有大量重要的html代码 所以放在div肯定会出错 把一些关键的html代码去掉 可能可以正常显示 没下楼主的代码不过,这种情况应该是回车换行,双引号之类的导致的,在asp里我碰到过,先在服务端把chr(13)&chr(10)替换成<br/>,然后把双引号替换成一个'(这个要看具体情况)在.net里,应该是把\n\r替换成<br/>,楼主可以尝试一下. 请问DataGrid中的Textbox,如何能设置其内容? 在线求助:用Login控件再次登录失败的问题(密码用户名均正确) 急!!!iframe病毒的问题 请教个关于二进制的问题 GridView控件数据为空时,不能正常显示的问题 一个奇怪的问题,虽然简单 怎么在定义属性时添加注释 别人的论坛程序,我布置报错,请看!!! 请问如何写传递hyperlink中的参数(非DataGrid中)? DataGrid問題:在分頁情況下,怎樣進行增加、保存、刪除記錄(急交貨,請大家多多關照!) 请问如何定义一个接口,分离对象实体和方法 关于数据导出成DBF格式的问题
-------------------
http://www.cnblogs.com/Files/BearsTaR/1.rar
服务器端:
protected string FormatMessage( MessageBox messages )
{
if ( messages.Messages.Count == 0 ) return "";
string temp = "";
ArrayList messageId = new ArrayList();
foreach ( MessageRecord i in messages.Messages )
{
temp += "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\">";
temp += "<tr>";
temp += "<td align=\"left\" width=\"100%\">";
if ( i.ReceiveOrSend == false )
temp += i.ChatTo + "对我说:";
else
temp += "我对" + i.ChatTo + "说:";
temp += i.SendTime + " </td>";
temp += "</tr>";
temp += "<tr>";
temp += "<td width=\"100%\" align=\"left\"><font color=\"#C66FFF\">";
temp += i.Content + " </font></td> </tr> </table>";
messageId.Add( i.ID.ToString() );
MinId = i.ID;
string[] dd = new string[5]; }
return temp;
return "";
} public void RaiseCallbackEvent( string Max )
{
MessageManager.UpdateIsRead( MaxId );
}
<script type="text/javascript" language="javascript">
function <%#this.ClientID%>_CallBack(){
<%# Page.ClientScript.GetCallbackEventReference( this, "", this.ClientID + "_GetResult", "")%>;
}
function <%#this.ClientID%>_GetResult(result){
if(result!="")
{
document.getElementById("messageSession1").innerHTML+=result;
}
}
i=window.setInterval("<%#this.ClientID%>_CallBack()",1000);
</script>
我觉得还是 AJAX只负责更新DIV 而DIV的内容靠后台代码解决,别用脚本改DIV的内容
只要让AJAX更新DIV这个区域就可以了
而脚本更新table的innerHTML,然后用setInterval不断更新....
----------------------------------再次声明:问题的重点是要显示的内容很特别。
div了,这样的话确实有点郁闷..你传过来的是html源代码吧,如果是这样的话可不可以把它的那些<html><body>这些标签去掉再传过来呢?
——————————————————————————————————————————
A:你可以用一个aspx读取邮件,然后Response.Write其内容。没有要你生成静态页面啊。
严重同意你!!!!
把ASPX页的内容显示到DIV中这根本就是非常错误的想法!!!ASPX输出的内容要用来显示!有以下办法
1:让ASPX页输出标准数据,而不是输出HTML页.比如直接写成XML或者自己定义的数据流.(有些站点的防图片盗连就是这样,让一个ASPX页根据参数输出图片字节流)
2:你自己去分析ASPX页的HTML代码,去除标记语言,自己抓出数据!
3:动态WINDOW,或者MOD窗口,嵌入试IFRAME等等办法.其实最好的多站多页面数据整合还是RSS\XML或者是WEBSERVCES
如“<”替换为“<”,“>”替换为“l>”
<![CDATA[ "这里放您的内容" ]]>
请将要输出的内容按下面的格式
<![CDATA[ "这里放您的内容" ]]>
————————————————————————————————————————————
A: 难道要显示html源代码?不是的,是要显示网页经过浏览器解释后的ui界面。
所以放在div肯定会出错
把一些关键的html代码去掉 可能可以正常显示
不过,这种情况应该是回车换行,双引号之类的导致的,在asp里我碰到过,先在服务端把chr(13)&chr(10)替换成<br/>,然后把双引号替换成一个'(这个要看具体情况)
在.net里,应该是把\n\r替换成<br/>,楼主可以尝试一下.