-- 作者:小鞋子
-- 发布时间:3/28/2004 12:51:00 PM
-- [心得]实现跨站数据共享,可能会遇到的问题集
在存储服务器共享代码时使用XML会经常碰到如下问题: 问题1:XML DATA ISLAND的问题 为什么有XMLDomDocument对象做为数据岛的属性,而没有XMLHTTP作为数据岛的属性。 解决办法:等待下一IE版本或插件 问题2:XMLHTTP的RESPONSEXML怎么获得动态数据,为什么用调试器只能获得TEXT, STREAM,BODY,XML却是空的,而我在服务器生成的是一标准XML文件。 查MSDN发现只能使用GET方法,并且是取一静态数据。 问题3:我写的<XML ID=X1 ASYNC=FALSE />这个同步属性在JS脚本调用时怎么不管 用。 解决办法:写一TIME函数判断状态READYSTATE=4,或者在脚本指定ASYNC=FALSE。 问题4:使用NODE保存函数,函数有<和>符号怎么办,又不想用替换,懒人思想。 解决办法:使用<![CDATE[ strHtml or strFunc ]]>它代表一个字符串类型。可以包 含一个长文本。 问题5:常见问题,我的XML出不来? 解决办法:检查生成或手写的XML是否有一个最外层嵌套标志<?xml version="1.0"?><data>...data...</data> 问题6:如何把我在客户端写的任意数据打包让服务器接收并存成文本文件?用 REQUEST的哪个变量呢?遍历FORM吗?可不是FORM提交的。 解决办法:str=bytes2BSTR(Request.BinaryRead(Request.TotalBytes )) bytes2BSTR是一函数,把二进制变为字符串 Function bytes2BSTR(vIn) strReturn = "" For i = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) i = i + 1 End If Next bytes2BSTR = strReturn End Function 问题7:为什么XML状态在JAVASCRIPT里面不是字符串类型?非要使用VBSCRIPT才能调 用readyState<>"complete" ,在JAVASCRIPT写readyState!="complete" 竟然说它类 型不匹配。 解决办法:没办法,只有用VBSCRIPT了。也许是和机器IE有关,也许别人的机器就可 以通过。 问题8:很老的问题,为什么我设置禁止使用ACTIVEX,我的XML对象用不了? 解决办法:赶紧看看你的代码里面是不用有<OBJECT CLASSID=****>把它删了。那 XML怎么办?写命名空间<html xmlns=xml><STYLE>xml\:* { BEHAVIOR: url(#default#XML) }</STYLE>OK,这样就可以了,竟然可以跳过安全检查!好厉害! 问题9:最后一个,事不过9,这是新手问题,刚开始用XML,我怎么取出XML某个节点 数据? data=spDatadso.XMLDocument.selectSingleNode("data/hsv2rgb").text XML文件数据<data><hsv2rgb>hello</hsv2rgb></data>, 如果节点比较多怎么办?查帮助用childNodes对象,或者XSL。 好了,以上我估计都是些常见问题。 问题10:没办法,是别人碰到的,出现: msxml3.dll 错误 '800c0007' 所需资源没有可用数据。 解决办法:xml.async =false加上它!!! 问题11:在HTML页面上也出现所需资源没有可用数据。 解决办法:加上xml.async =false也不管用,这是因为使用直接写HTML,不是用函数 调用的原因,加一定时器,setTimeout("loadxml",4000);也可自己加readyState这些 及时更新,方法很简单,我就不说了。
|