2010-08-26 129 views
1

我终于成功地使用Ajax将SOMETHING从一个页面发送到另一个页面!我正在试图做的是通过从一个PHP文件中的JavaScript文件的阵列,以及JavaScript文件在this.responseText收到此:从Ajax请求解码JSON数组

<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

你取回一个HTTP 200状态码回来?使用萤火虫,以确定是否是脚本没有返回或呼叫完全失败的问题。 – 2010-08-26 15:40:01

回答

1

如果你的php页面正在返回你报告的所有文本(使用< html> etc ...),那么你的输出不是JSON对象,而是一个html页面。您的回答应该只包含你的序列化JSON对象(和适当的HTTP响应头)...

一旦你“干净”你的输出,你可以使用JSON2库来解析你的对象: http://www.json.org/js.html

var myObject = JSON.parse(myJSONtext); 
0

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

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

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); 
?> 
+0

好的,所以我把数组放在一个.json文件中,但是现在eval会提供'undefined'。 – Andy 2010-08-26 15:54:00

+0

我不确定'我把数组放在json文件中'是什么意思。 victim.php文件应该对发布数据进行任何处理,然后仅回传JSON数据。您还应该将响应类型设置为“text/json”。 使用firebug mozilla扩展来检查你发送的内容和你正在接收的内容,ajax调用应该只返回逃脱的javascript代码 – 2010-08-26 16:25:50