我终于成功地使用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>
答案 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通常是不安全的。