从Ajax请求解码JSON数组

时间:2010-08-26 15:28:38

标签: php javascript json

我终于成功地使用Ajax将SOMETHING从一个页面发送到另一个页面!我要做的是将数组从PHP文件传递到Javascript文件,Javascript文件在this.responseText中收到:

<html>
<head>

    <script type="text/javascript">
        var jsonArray = ["chickens","horses","cows","werewolves","zombies","vampires","phantoms","U.S. Congressmen","performance artists","pieces of fencepost","barnhouses","robots","cyborgs"]

    </script>
</head>
</html>

我尝试运行eval()alert结果,但没有显示结果。如何从this.responseText成功提取数组?

编辑到目前为止,这是我的功能:

/*
 * 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 vicArray = eval('('+this.responseText+')');
                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);
}    

第二次编辑包含数组的文件(在PHP中)如下:

<html>
<head>
<?php

$victims = array(

    // Animals
    "chickens",
    "horses",
    "cows",

    // Supernatural
    "werewolves",
    "zombies",
    "vampires",
    "phantoms",

    // Human
    "U.S. Congressmen",
    "performance artists",

    // Inanimate, non-mechanical
    "pieces of fencepost",
    "barnhouses",

    // Mechanical
    "robots",
    "cyborgs"

);

?>

    <script type="text/javascript">
        var jsonArray = <?php echo json_encode($victims); ?>


    </script>
</head>
</html>

3 个答案:

答案 0 :(得分:1)

如果您的php页面返回您报告的所有文本(使用&lt; html&gt;等...),那么您的输出不是JSON对象,而是html页面。您的响应应该只包含序列化的JSON对象(以及正确的http响应头)......

一旦“清理”了输出,就可以使用JSON2库来解析对象: http://www.json.org/js.html

var myObject = JSON.parse(myJSONtext);

答案 1 :(得分:1)

这看起来不像来自服务器的正确JSON响应,因为它包含HTML代码,然后是一大堆javascript。响应应仅包含包含数据的javascript代码,例如

var data = ["chickens","horses","cows","werewolves","zombies"]";

然后你可以eval()字符串,它会起作用。

如上所述,eval()可能不安全,因此,如果使用jQuery,您可以使用安全的$.parseJSON函数。

要正确返回JSON,请不要在页面中输出HTML,只需执行类似

的操作
<?php

    $victims = ...; // fill array

    echo json_encode($victims);
?>

答案 2 :(得分:0)

您可以使用json.org上的库或使用eval(“(”+ this.responseText +“)”);

通常你想使用库来解析JSON字符串而不是eval,因为eval通常是不安全的。