JavaScript读入XML的小问题讨论
说明:因为没有试过用中文系统地讨论技术问题,所以我的中文表达恐怕会有不妥当之处, 请包涵.

我在最近做的小项目里遇到一个问题:如何获取服务器端的数据在本地客户端及时生成图像.(服务器端的数据是变化的).

背景:服务器端使用XML存储数据,客户端读入数据,用JavaScript+VML(Vector Markup Language)画图,并且允许修改数据,以表格形式提交服务器端,更新XML文件.

限制:对XML文件的读入可以采用JScript 或VBScript书写; 但是为了用VML画图, 需要用JavaScript捕捉窗口长度,宽度等信息(无法用VBScript做到???), 所以最终的图中元素的大小尺寸及其他说明信息均必须用JavaScript形的变量.

问题:我首先使用VBScript写了一个画图程序,因为无法获得窗口大小信息,所以不能进行失量图的自由放缩, 最后放弃. 然后我用纯JavaScript写了从XML读入数据到画图的程序, 可以进行我需要的所有放缩动作, 但是,请注意,出现了一个很可笑的情况, 当我手动把服务器端的XML文件进行改动时, 客户端显示的仍然是未修改前的数据!而用VBScript写的程序则没有这样的问题,所获得的数据总能及时更新.

讨论:我同一个朋友讨论了一下, VBScript主要在服务器端工作,所以能获得实时数据; 而JavaScript/Jscript在客户端工作,不能捕捉到服务器端的实时数据.

解决方案:我想可不可以这样做呢, 先用VBScript 在服务器端获得实时数据, 传送给客户端, 再用JavaScript作图. 这就关系到了如何把VBScript的数组数据转化为JavaScript的数组数据. 虽然JavaScript中有VBArray方法强制转换, 但是经过我实际测试, 并不实用.
如果这样做就理想了:
1.首先从XML 读入数据(照一般方法);
<%
Dim strId

Dim strFile
StrFile="我的XML文件"

Dim myxml
Set myxml=Server.CreateObject("Microsoft.XMLDOM")
myxml.async = false
myxml.load (Server.Mappath(strFile))

把你所需要的数据存入strId字符串(String)中,使用一个或任意个不会同数据混淆的分隔字符(例如: "?")
nix="nothing"
For Each prozess in myxml.getElementsByTagName ("prozess")
 
    '********strId***********
    If isNull(prozess.Attributes.getNamedItem("id").nodeValue) Then
      strId=strId & nix & "?"
    Else
      strId=strId & prozess.Attributes.getNamedItem("id").nodeValue & "?"
    End If
      Next
%>
2.这时我们有一个VBScript的字符串strId, 接下来我把这个字符串转化为JavaScript的数组.
<script language=JavaScript>
function getStrArray(str){
    var mystr;
    mystr=str.split("?");
    return(mystr);  
}

function getIntArray(array){
    var myarray=new Array();
    for (i=0;i<array.length;i++){
      if (array[i]=="undefine")
        myarray[i]=-1;
      else if(isNaN(parseInt(array[i]))==false)
        myarray[i]=parseInt(array[i]);
      
    }
    return myarray;

     
     var id=new Array();
     var stridtemp="<%=strId%>";
     id=getStrArray(stridtemp);// 或者id=getIntArray(getStrArray(stridtemp))
    </Script>

这样最后我就得到了一个含有实时数据信息的JavaScript数组.