AJAX设置DIV的innerhtml的问题
AJAX动态获取邮件的内容并显示到DIV中,一般的都比较正常,现在有个问题。
当邮件内容是个ASPX页面的内容时就会出错,而且报的"Unknow Error".
但是如果把这个邮件内容通过后台.cs中的代码来设置到div的innerhtml就没问题,
但这样就会刷新页面,是我不想的。
大家有没有碰见过这样的问题,帮帮忙。
问题点数:200、回复次数:30Top
1 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 09:38:35 得分 0
下面这个是邮件的内容,因为有点大,CSDN有字数限制。所以就上传了下,大家帮忙看看
-------------------
http://www.cnblogs.com/Files/BearsTaR/1.rarTop
2 楼avisnet(第十维度)回复于 2006-10-28 09:53:16 得分 10
是取不到内容还是取到内容后设置innerHTML时有问题?Top
3 楼ustbwuyi()回复于 2006-10-28 10:00:59 得分 10
你把后台的邮件内容解析成xml然后通过异步回调传到页面,赋给div的innerhtmlTop
4 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 10:02:57 得分 0
To avisnet(第十维度) :
能取到内容,就是在付值的时候出错了Top
5 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 10:03:55 得分 0
to:ustbwuyi()
你可能没看清楚我的问题!!!Top
6 楼ustbwuyi()回复于 2006-10-28 10:04:51 得分 10
给个例子
服务器端:
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 );
}Top
7 楼ustbwuyi()回复于 2006-10-28 10:05:11 得分 10
客户端:
<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>Top
8 楼ustbwuyi()回复于 2006-10-28 10:05:57 得分 10
我的意思是从后台取而不刷新页面..Top
9 楼fengyecsdn(幸福的屁颠颠~HOHO 最近事业爱情都顺利!加油)回复于 2006-10-28 10:22:42 得分 10
晕死了 看你的题目真不明白你到底问题是啥
你是用AJAX直接去读信息了么?
我觉得还是 AJAX只负责更新DIV 而DIV的内容靠后台代码解决,别用脚本改DIV的内容
只要让AJAX更新DIV这个区域就可以了Top
10 楼ustbwuyi()回复于 2006-10-28 10:34:33 得分 10
楼上的说得很有道理,我的例子就是这样处理的,异步回调负责更新table,内容来自于后台,
而脚本更新table的innerHTML,然后用setInterval不断更新....Top
11 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 10:49:31 得分 0
大家看清楚我的问题,我的重点不是AJAX的使用,主要的问题是我要显示的内容,如果是一般的内容就都没问题,比如ustbwuyi() 给的例子中的代码就是一般的内容。
而当要显示的内容是整1个ASPX页面的内容的时候,就会出错。
大家可以下载http://www.cnblogs.com/Files/BearsTaR/1.rar
然后用JS把这个内容显示在DIV里面看看会不会出错。
----------------------------------
再次声明:问题的重点是要显示的内容很特别。Top
12 楼ustbwuyi()回复于 2006-10-28 10:59:43 得分 10
哦...原来这样,不用试也知道显示在div肯定会有错,相当于把html标签什么的都包到
div了,这样的话确实有点郁闷..你传过来的是html源代码吧,如果是这样的话可不可以把它的那些<html><body>这些标签去掉再传过来呢?Top
13 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 12:09:48 得分 0
但是问题是,为什么用后台的.cs代码把它显示在DIV中就一切正常了。
你可以试试在ASP:BUTTON下click时间下读取内容并付值到DIV的innerhtml中就一切正常了。Top
14 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-28 12:55:11 得分 20
你直接把它拷贝在<div></div>中间也照样不出错误(其实哪是什么不出错误呀,明明是ie对很多错误都直接忽略,以免太技术化吓坏、烦坏一般群众),但是使用脚本命令的innerHTML属性来赋值才出错。Top
15 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-28 13:00:17 得分 10
要注意,虽然在ie上不出错,并不意味着这就符合现在所谓web标准(这是一个web标准上学究的习惯越来越盖过位用户着想的实践者的意见的时代),因此很多浏览器都会出错,甚至ie新版本都可能不允许此类写法。
尽管不出错,并不意味着内部的东西能够正常显示。最终还是放在服务器端并且用iframe中显示比较正常。Top
16 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 13:07:03 得分 0
用iframe不行啊,我那么多邮件,不可能每个邮件生成1个静态页面啊!!!Top
17 楼stone_soup(夜不打拾)回复于 2006-10-28 13:24:05 得分 0
MarkTop
18 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-28 13:58:29 得分 10
Q:用iframe不行啊,我那么多邮件,不可能每个邮件生成1个静态页面啊!!!
——————————————————————————————————————————
A:你可以用一个aspx读取邮件,然后Response.Write其内容。没有要你生成静态页面啊。Top
19 楼ustbwuyi()回复于 2006-10-28 14:35:47 得分 10
我刚开始也想的用iframe,不过后来觉得到时候会有点问题,不过还是可以一试Top
20 楼fengyecsdn(幸福的屁颠颠~HOHO 最近事业爱情都顺利!加油)回复于 2006-10-28 22:27:35 得分 10
sp1234(没有心情,没有心情短语)
严重同意你!!!!
把ASPX页的内容显示到DIV中这根本就是非常错误的想法!!!
ASPX输出的内容要用来显示!有以下办法
1:让ASPX页输出标准数据,而不是输出HTML页.比如直接写成XML或者自己定义的数据流.(有些站点的防图片盗连就是这样,让一个ASPX页根据参数输出图片字节流)
2:你自己去分析ASPX页的HTML代码,去除标记语言,自己抓出数据!
3:动态WINDOW,或者MOD窗口,嵌入试IFRAME等等办法.
其实最好的多站多页面数据整合还是RSS\XML或者是WEBSERVCES
Top
21 楼yougucao379548695(郑州-小刘)回复于 2006-10-29 19:26:13 得分 0
呵呵,帮顶!Top
22 楼zlopen(MadeInChina)回复于 2006-10-30 09:38:00 得分 10
在页面赋值前,把innerhtml的冲突内容进行转义即可
如“<”替换为“<”,“>”替换为“l>”Top
23 楼ls212(鲁四)回复于 2006-10-30 12:07:49 得分 0
学习!~~~~Top
24 楼sh_city(潜水的鱼)回复于 2006-10-30 14:32:41 得分 10
请将要输出的内容按下面的格式
<![CDATA[ "这里放您的内容" ]]>Top
25 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-30 14:38:06 得分 10
Q: 在页面赋值前,把innerhtml的冲突内容进行转义即可
请将要输出的内容按下面的格式
<![CDATA[ "这里放您的内容" ]]>
————————————————————————————————————————————
A: 难道要显示html源代码?
不是的,是要显示网页经过浏览器解释后的ui界面。Top
26 楼Csharp110(~泰山~)回复于 2006-10-30 14:54:43 得分 0
学习了!只能帮你顶!Top
27 楼JennyGreator()回复于 2006-10-31 09:05:58 得分 10
AJAX本来就是前台的东西,如果要用后台去更新还用AJAX干吗。Top
28 楼jacky_20001(阿瑞)回复于 2006-10-31 09:24:20 得分 10
aspx里面有大量重要的html代码
所以放在div肯定会出错
把一些关键的html代码去掉 可能可以正常显示Top
29 楼min_1982(我顶我顶我顶顶顶)回复于 2006-10-31 09:31:20 得分 0
路过学习Top
30 楼yiyioo(天一(一个人的Team))回复于 2006-10-31 09:33:12 得分 10
没下楼主的代码
不过,这种情况应该是回车换行,双引号之类的导致的,
在asp里我碰到过,先在服务端把chr(13)&chr(10)替换成<br/>,然后把双引号替换成一个'(这个要看具体情况)
在.net里,应该是把\n\r替换成<br/>,楼主可以尝试一下.Top




