我自己写了一个东西,想实现以下功能:
服务器端计算出一个数组用来储存一系列point屏幕坐标,希望这个数组可以传递到客户端的javascript函数中去作为一个客户端img的位置移动坐标。偶不知道如何实现将服务器端数据传递给客户端的javascript函数,还请各位指教!
服务器端计算出一个数组用来储存一系列point屏幕坐标,希望这个数组可以传递到客户端的javascript函数中去作为一个客户端img的位置移动坐标。偶不知道如何实现将服务器端数据传递给客户端的javascript函数,还请各位指教!
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>
<!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> </div>
</body>
</HTML>
您的方法很巧妙,一看您就有不错的asp功底:),但有一点我想问问:如果数据量很大,您的方法是不是会导致页面显示变慢?to bitsbird:
您的代码我看不太懂,能否加些注释?还有,如果计算功能必须在aspx页面的服务器端完成,该如何将数据传递给asmx中的webservice函数或对象?
所以数据量肯定会增大,页面也肯定比不传递这些数据要慢当然异步操作不会影响页面加载,这是个好处
缺点就是比我那个方法复杂一些
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">
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">
这句打错了..应该是==不是=...Sorry.var iniArr = xmlhttp.responseText;//获取结果.这里可以再加一句判断if(xmlhttp.status==200){处理正确结果;}else{没有结果;}
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。
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的数组,可以直接用