我正在以JSON格式从PHP函数中获取数据。
var xhReq = new XMLHttpRequest();
xhReq.open("GET", "http://myserver/getjson", false);
xhReq.send(null);
var serverResponse = xhReq;
var jsondata=eval("("+serverResponse.responseText+")") //retrieve result as an JavaScript object
images="";
for(var i=0; i<jsondata.length;i++)
{
images+=" ['"+jsondata[i].title+"','"+IMAGESROOT+"121a.png"+"']";
if(i<jsondata.length-1)
images+=",";
}
我以下列格式获取此数据。
['title 1','http://site.com/images/121a.png'],
['title 2','http://site.com/images/121a.png'],
['title 3','http://site.com/images/121a.png'],
['title 4','http://site.com/images/121a.png']
最后,当我使用eval()
将此数据指定为数组时var tinyMCEImageList = new Array(eval(images));
它只显示数组的最后一个元素['title 4','http://site.com/images/121a.png']
。
我希望分配数组的每个元素。
答案 0 :(得分:2)
一个简单的解决方案是
var tinyMCEImageList = eval('['+serverResponse.responseText+']');
或
var tinyMCEImageList = JSON.parse(
'['+serverResponse.responseText.replace(/'/g, '"')+']'
);
但更好的解决方案是通过添加缺少的[
和]
并使用适当的引号来生成JSON,这样您就可以直接使用JSON.parse
。请注意,PHP标配了generate JSON的所有工具。
答案 1 :(得分:0)
试试这个
var tinyMCEImageList = new Array();
for(var i=0; i<jsondata.length;i++)
{
images+=" ['"+jsondata[i].title+"','"+IMAGESROOT+"121a.png"+"']";
if(i<jsondata.length-1)
images+=",";
tinyMCEImageList[]=images
}
答案 2 :(得分:0)
试试这个:
var jsondata=eval("(["+serverResponse.responseText+"])") //retrieve result ..
这四个元素缺少数组封装,最后一个元素只返回。
答案 3 :(得分:0)
在javascript中,大括号(
和)
可能意味着以下两种情况之一:
在函数结束时,它会触发函数调用。
在表达式中,它会覆盖运算符优先级。
所以,既然你正在尝试eval是一个表达式,它看起来像是2号正在发生。请注意,上述两个含义是大括号在javascript中执行的唯一操作。例如,大括号不能用作分组或列表操作符,例如Perl。
接下来我们遇到逗号运算符。在javascript中,逗号,
可以表示以下四种情况之一:
在函数调用中,逗号分隔传递给函数的参数。
在数组文字中,逗号分隔数组成员。
在对象文字中,逗号分隔对象成员。
在表达式中,逗号是逗号运算符。
什么是逗号运算符?逗号运算符是一个运算符,它接受两个表达式,计算两个表达式并返回第二个表达式。所以假设您有3个表达式X,Y和Z.以下行:
X, Y, Z
javascript中的基本上与:
相同(X , Y) , Z
所以当然上面的表达式首先计算X然后Y,然后返回Y作为结果,然后返回Y,然后返回Z并返回Z作为结果。
所以你看到的是行为4:逗号作为逗号运算符。
我怀疑你的意图是行为编号2:逗号充当数组分隔符。如果是这样,你正在评估的字符串是错误的。它应该是:
"[" + your_string + "]"
这意味着您收到的数据不是JSON(或者更确切地说,是无效的JSON)。您可以通过执行上述操作来解决此问题,以解析javascript中的非JSON字符串。或者您可以在php中执行上述操作以使数据有效JSON,以便您的javascript代码可以正常工作。