我写了一个定时从数据库取数据,ajax刷新页面的程序。服务器端用的php访问数据库获得数据,前端用javascript解析json数据,使用eval函数,但这句话总是报错。编程新手,求各位大神指教!谢谢!
服务器端程序:
header("Content-type:text/html; charset=gb2312");
//获取全部实时数据
$realTimeData=new realTimeData();
$DataArray=array();
$count=0;
$result=$realTimeData->getNewData("");
while(($res=$result->fetch(PDO::FETCH_ASSOC))!=null)
{
$DataArray[$count]=array();
$realTimeData->fetchResult($res);
array_push($DataArray[$count],$realTimeData->m_observationCode);
array_push($DataArray[$count],$realTimeData->m_observationValue);
$count=$count+1;
}
echo json_encode($DataArray); //输出json
调试PHP代码输出:[["observation00000","30"],["observation00001","26"],["observation00002","25"]]
前端ajax的回调函数:
//回调函数:
function writeData()
{
if(xmlhttp.readyState==4)
{
isRefreshing=false;
hiddenLoading();
//将结果遍历写入页面
var r=xmlhttp.responseText;
var result=eval("("+r+")"); //将JSON文本转换为javascript对象,这句话报错
for(var key in result)
{
document.getElementById(key).innerHTML=result[key];
}
}
}
前端页面:
<span>测点1:</span>
<span id="observation00000"></span></br>
<span>测点2:</span>
<span id="observation00001"></span></br>
<span>测点3:</span>
<span id="observation00002"></span></br>
回复讨论(解决方案)
你alert下看看xmlhttp.responseText 得到的值 是不是不符合标准。
你alert下看看xmlhttp.responseText 得到的值 是不是不符合标准。
谢谢你~
xmlhttp,responseText得到的值是:
[["observation00000","30"],["observation00001","26"],["observation00002","25"]]
请问这个是标准的JSON格式吗?
你alert下看看xmlhttp.responseText 得到的值 是不是不符合标准。
谢谢你~
xmlhttp,responseText得到的值是:
[["observation00000","30"],["observation00001","26"],["observation00002","25"]]
请问这个是标准的JSON格式吗?
数组,就你贴出来的这个eval不会报错
document.getElementById(key).innerHTML=result[key];
报错的应该是这句,for(var key in result)遍历key是数组下标,就是0,1,2,你没有这种形式的dom对象
if(document.getElementById(result[key][0]))//最好判断dom对象是否存在,不存在会报错 document.getElementById(result[key][0]).innerHTML=result[key][1];//应该这样
[["observation00000","30"],["observation00001","26"],["observation00002","25"]]
只是个2维数组。
JSON格式应该是这样
[{"observation00000":"30"},{"observation00001":"26"}]