如何将服务器端计算出的数组传递到客户端的JavaScript?

假设在服务器端计算得到了一个数组s需要传递到JavaScript中的名为my_array的数组继续进行处理:
protected int[] s;//protected or public is required
为了测试给s赋几个值:
s = new int[100];
for (int i=0; i<s.Length; i++)
{
s[i] = i;
}
-------------------------------------------------------------------
方法一(ASP风格,不推荐):
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];
}
</script>

-------------------------------------------------------------------
方法二(使用webservice,感谢bitsbird提供了代码):
<!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 οnlοad="Init()">
<div id="Service" style="BEHAVIOR:url(webservice.htc)"></div>
<div id="divFeatured"><FONT face="宋体"></FONT>&nbsp;</div>
</body>
</HTML>

-------------------------------------------------------------------
方法三(使用XmlHttp):
在任一页面的Page_Load()里面写:
if (Request.QueryString["GetData"] == "1")
{
Response.ClearContent();
string copyValue = null;
for (int i=0; i<s.Length; i++)
{
copyValue += s[i] + ",";
}
Response.Write(copyValue.Substring(0, copyValue.Length - 1));
Response.End();
}
然后在要得到值的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;
eval("my_array = new Array(" + iniArr + ");");
//下面为测试用代码
for (i=0; i<my_array.length; i++)
{
document.all("num").innerText += my_array[i] + ", ";
}
}
用一个按钮的单击事件启动:
<input type="button" οnclick="javascript:AsyncCopy();" value="Copy">

-------------------------------------------------------------------
方法四(使用Page.RegisterArrayDeclaration()):
在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的数组,可以直接用
备注:上面的代码仅供演示,一些数组大小用的都是常数,而且没有异常处理,使用时需要完善。

总结:
1、最简单、方便的是第四种方法。有了这种方法,第一种方法就是多余的了。
2、xmlhttp和webservice这两种方法不会影响页面的初次加载时间,可以在需要的时候随时获得数组,适合大数据量的传输。同时这两种方法不受页面的限制,在A页面的js可以获得B页面的数组或者另一个Webservice的计算结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是实现该功能的 JavaScript 代码: ``` var arr = [{name: "张三", sex: "男"}, {name: "李四", sex: "女"}]; // 数组 var xhr = new XMLHttpRequest(); // 创建 XMLHttpRequest 对象 xhr.open('POST', 'http://example.com/parse.php', true); // 发送 POST 请求到 parse.php xhr.setRequestHeader('Content-type', 'application/json'); // 设置请求头为 JSON 格式 xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // 请求完成,状态码为 200 var parsedObj = JSON.parse(xhr.responseText); // 解析返回的 JSON 字符串 console.log(parsedObj.j1, parsedObj.j2, parsedObj.j3); // 输 j1,j2,j3 的值 } }; xhr.send(JSON.stringify(arr)); // 发送数组JSON 字符串到服务器端 ``` 接下来,这是实现该功能的 PHP 代码: ``` <?php $input = file_get_contents('php://input'); // 从请求中获取 JSON 字符串 $data = json_decode($input, true); // 解析 JSON 字符串为数组 $result = array(); // 创建一个数组用于存放查询结果 foreach ($data as $item) { // 构造 SQL 查询语句 $sql = "SELECT j1, j2, j3 FROM table_name WHERE name = '{$item['name']}' AND sex = '{$item['sex']}'"; // 执行 SQL 查询 $queryResult = mysqli_query($conn, $sql); if (mysqli_num_rows($queryResult) > 0) { // 获取第一行的查询结果 $row = mysqli_fetch_assoc($queryResult); // 将 j1,j2,j3 的值存入 $result 数组 $result[] = array('j1' => json_decode($row['j1']), 'j2' => json_decode($row['j2']), 'j3' => json_decode($row['j3'])); } } echo json_encode($result); // 将 $result 数组转换为 JSON 字符串并输 ?> ``` 注意到 `mysqli_query` 函数将执行一条 SQL 查询语句,该语句将查询数据库表 `table_name` 中的一列。对于安全性,查询语句与传递到数据表查询语句中的信息需要进行过滤,可以使用合适的过滤方法,例如:`mysqli_real_escape_string`、`htmlspecialchars`等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值