JSON数组不使用Eval解码

时间:2010-08-26 17:55:13

标签: javascript ajax json eval

我有两个文件,一个包含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包含格式为

的JSON编码数组
var jsonArr = 
     ["1","2,","3"]

激活该函数不会执行任何操作,eval this.responseText会产生“未定义”。

我在这里做错了什么?我可以提供更多的实际代码示例,实际数组,如果需要的话。这让我发疯了。

3 个答案:

答案 0 :(得分:3)

尝试将“(”和“)”添加到Eval函数。这就是我过去看到它的方式

var myObject = eval('(' + vicString + ')');

答案 1 :(得分:1)

使用request代替thisthis指的是window对象。

编辑:如果var jsonArr=[1, 2, 3];确实是回复,那么如果您无法更改回复文字,则应使用eval(vicString+';jsonArr');

如果你运行'eval(“var test = [1,2,3];”)',你就会看到它确实返回undefined。但这不是使用JSON的好习惯。

答案 2 :(得分:0)

将服务器中响应的内容类型设置为“application / json”,您将不再需要使用eval。
另外,您最好使用ajax框架而不是使用自己的ajax函数。