我有两个文件,一个包含PHP中的数组,通过json_encode echo
编辑,另一个包含网页的javascript函数。一个这样的功能,看起来像这样(并且未完成):
/*
* Function: selectVictim
* Called from function laserOn()
*
* Selects a random victim from a list of victims
*
* @return String: victim
*/
function selectVictim()
{
var params = "url=queenofsheep.com/Sheep/victims.php";
var request = new ajaxRequest();
request.open("POST", "victims.php", true);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.setRequestHeader("Content-Length", params.length);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = function ()
{
if (this.readyState == 4)
{
if (this.status == 200)
{
if (this.responseText != null )
{
var vicString = this.responseText;
var vicArray = eval('"'+vicString+'"');
//var vicArray = vicString.split(',');
//var numVic = Math.floor(Math.random() * (vicArray - 1));
alert(vicArray);
}
else alert("Ajax error: No data received");
}
else alert("Ajax Error: " + this.statusText);
}
}
request.send(params);
}
应该从另一个文件中接收数组并对其进行超出此问题范围的操作。不幸的是,虽然this.responseText
包含格式为
var jsonArr =
["1","2,","3"]
激活该函数不会执行任何操作,eval
this.responseText
会产生“未定义”。
我在这里做错了什么?我可以提供更多的实际代码示例,实际数组,如果需要的话。这让我发疯了。
答案 0 :(得分:3)
尝试将“(”和“)”添加到Eval函数。这就是我过去看到它的方式
var myObject = eval('(' + vicString + ')');
答案 1 :(得分:1)
使用request
代替this
。 this
指的是window
对象。
编辑:如果var jsonArr=[1, 2, 3];
确实是回复,那么如果您无法更改回复文字,则应使用eval(vicString+';jsonArr');
。
如果你运行'eval(“var test = [1,2,3];”)',你就会看到它确实返回undefined。但这不是使用JSON的好习惯。
答案 2 :(得分:0)
将服务器中响应的内容类型设置为“application / json”,您将不再需要使用eval。
另外,您最好使用ajax框架而不是使用自己的ajax函数。