我自己写了一个东西,想实现以下功能:
服务器端计算出一个数组用来储存一系列point屏幕坐标,希望这个数组可以传递到客户端的javascript函数中去作为一个客户端img的位置移动坐标。偶不知道如何实现将服务器端数据传递给客户端的javascript函数,还请各位指教!

解决方案 »

  1.   

    protected int[] s;//protected or public is requiredIn Page_Load() initialize the array for testing
    s = new int[100];
    for (int i=0; i<s.Length; i++)
    {
    s[i] = i;
    }In the aspx page:
    <script language="javascript">
    //将cs中的数组传给js中的数组
    var my_array = new Array(100);
    <%
    string iniArr = null;
    for (int i=0; i<100; i++)
    {
    iniArr += "my_array[" + i + "]=" + s[i] + ";";
    }
    %>
    <%=iniArr%>
    for (i=0; i<100; i++)
    {
    document.all("num").innerText += my_array[i]; //output to check the answer
    }
    </script>
      

  2.   

    服务器端数组是不能直接传递到客户端的,你可以用“x1,y1|x2,y2”这样的字符串代替,用<%=坐标串%>传递到客户端,再在js中用split语句生成数组.
      

  3.   

    使用xmlhttp或者webservice
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
     <HEAD>
      <title>RealTime</title>
      <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
      <meta name="CODE_LANGUAGE" Content="C#">
      <meta name="vs_defaultClientScript" content="JavaScript">
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      <script language="javascript">
     var intCallID=0;
     function Init()
     {
     GetNewFeatured();
     setInterval("GetNewFeatured()",10000);
     }
     function GetNewFeatured()
     {
       Service.useService("http://localhost/WebService/LoadData/FeaturedService.asmx?WSDL","FeaturedService");
       intCallID=Service.FeaturedService.callService(RealTime_Result,"GetScores");
     }
     function RealTime_Result(result)
     {
      if(result.error)
      {
       divFeatured.innerHTML=result.errorDetail.string;
      }
      else
      {
      divFeatured.innerHTML=result.value;
      }
     }
     </script>
     </HEAD>
     <body onload="Init()">
      <div id="Service" style="BEHAVIOR:url(webservice.htc)"></div>
      <div id="divFeatured"><FONT face="宋体"></FONT>&nbsp;</div>
     </body>
    </HTML>
      

  4.   

    to fancyf(凡瑞):
    您的方法很巧妙,一看您就有不错的asp功底:),但有一点我想问问:如果数据量很大,您的方法是不是会导致页面显示变慢?to bitsbird:
    您的代码我看不太懂,能否加些注释?还有,如果计算功能必须在aspx页面的服务器端完成,该如何将数据传递给asmx中的webservice函数或对象?
      

  5.   

    从服务器向客户端传数据肯定要输出在页面上,即使xmlhttp异步操作也最终要发送到客户端,无论何种方法都无法避免
    所以数据量肯定会增大,页面也肯定比不传递这些数据要慢当然异步操作不会影响页面加载,这是个好处
    缺点就是比我那个方法复杂一些
      

  6.   

    异步操作?大致如何实现呢?还请fancyf兄赐教!
      

  7.   

    You can do as shown below.
    In Page_Load()
    if (Request.QueryString["GetData"] == "1")
    {
    Response.ClearContent();
    string copyValue = null;
    for (int i=0; i<s.Length; i++)
    {
    copyValue += "my_array[" + i + "]=" + s[i] + ";";
    }
    Response.Write(copyValue);
    Response.End();
    }In aspx page
    function AsyncCopy()
    {
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
    xmlhttp.open("GET","ModifyToYourPageUrl.aspx?GetData=1", false);
    xmlhttp.send();
    var iniArr = xmlhttp.responseText;
    eval(iniArr);
    for (i=0; i<100; i++)
    {
    document.all("num").innerText += my_array[i] + ", ";
    }
    }<input type="button" onclick="javascript:AsyncCopy();" value="Start to Copy">
      

  8.   

    我给你加注释..In Page_Load()//处理XMLHTTP传递参数.并返回数组,注意:删除aspx页面中除<%page%>外的所有HTML代码,否则返回的数组中会带有这些HTML代码
    if (Request.QueryString["GetData"] == "1")
    {
    Response.ClearContent();
    string copyValue = null;
    for (int i=0; i<s.Length; i++)
    {
    copyValue += "my_array[" + i + "]=" + s[i] + ";";
    }
    Response.Write(copyValue);
    Response.End();
    }In aspx page//XMLHTTP页面JS脚本
    function AsyncCopy()
    {
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
    xmlhttp.open("GET","ModifyToYourPageUrl.aspx?GetData=1", false);//传递参数到处理页面
    xmlhttp.send();
    var iniArr = xmlhttp.responseText;//获取结果.这里可以再加一句判断if(xmlhttp.status=200){处理正确结果;}else{没有结果;} eval(iniArr);
    for (i=0; i<100; i++)
    {
    document.all("num").innerText += my_array[i] + ", ";
    }
    }<input type="button" onclick="javascript:AsyncCopy();" value="Start to Copy">
      

  9.   

    var iniArr = xmlhttp.responseText;//获取结果.这里可以再加一句判断if(xmlhttp.status=200){处理正确结果;}else{没有结果;}
    这句打错了..应该是==不是=...Sorry.var iniArr = xmlhttp.responseText;//获取结果.这里可以再加一句判断if(xmlhttp.status==200){处理正确结果;}else{没有结果;}
      

  10.   

    我支持 glhx(呵呵) 的做法,用有两种分隔符的字符串传递给客户短,然后到了客户端再用split来进行二次分割,分割出来就是一个2为数组(第一维表示第几个Point,第二维表示Point的x还是y属性)。服务器端:
    string str="";
    for(int i=0;i<MyPoints.Count;i++)
      str+=MyPoints[i].x+","+MyPoints[i].y+"|";
    Response.Write(@"<script>var str="+str+@"</script>");然后再在客户端script中分隔。
    var myPoints=str.split("|");
    var i;
    for(i=0;i<myPoints.length;i++)
      myPoints[i]=myPoints[i].split(",");这样就得到了客户端的myPoints。
      

  11.   

    又发现一种方法,用Page.RegisterArrayDeclaration():
    In Page_Load():System.Text.StringBuilder sb = new System.Text.StringBuilder(512);
    foreach (int i in s)
    {
    sb.Append(i);
    sb.Append(',');
    }
    sb.Length--;
    Page.RegisterArrayDeclaration("my_array", sb.ToString());
    这样就在客户端生成了一个名为my_array的数组,可以直接用