尝试使用Javascript将字符串转换为对象,但在ie8中获取语法错误

时间:2011-12-13 04:33:04

标签: javascript json object eval

我有一个php文件,使用xmlhttp将字符串发送到js文件。 js文件应该将字符串转换为对象并开始在此对象上执行其操作。

好吧,php文件正在打印这个字符串:

$obj="{status:'ok',data:'{link:\"".$link."\",c:\"".$c."\",p:\"".$p."\"}'}";
echo $obj;

并且js文件应该得到:

{status:'ok',data:'{link:"http://test.com/test.html",c:"9",p:"1"}'}

当我尝试将js文件中的字符串从字符串转换为对象时,我在ie8上遇到语法错误(在firefox和chrome中工作正常)。

以下是我在js文件中的操作方法:

eval("var response=" + xmlhttp.responseText);

我试图将字符串手动放在js文件中并且eval有效,所以我认为问题在于php文件发布的撇号和引号。

你怎么看?有谁知道这种问题的解决方案?

提前致谢!

2 个答案:

答案 0 :(得分:2)

为了详细说明我上面的评论,PHP和JavaScript都使编码和解码JSON变得非常容易。你的PHP看起来像这样,一个干净的嵌套数组,没有丑陋的字符串连接:

<?php
$obj = array(
  'status' => 'ok',
  'data'   => array(
    'link' => $link,
    'c'    => $c,
    'p'    => $p
  )
);
?>

...而且你的JavaScript看起来像这样,没有丑陋的eval

<script>
  var response = JSON.parse(xmlhttp.responseText);
</script>

如果您使用的是没有编译的JSON支持的PHP副本,并且无法自己更新它,那么有许多用于PHP的开源JSON库,您可以将其放入相同的功能,包括来自PEAR的Services_JSON

如果您支持没有内置JSON的浏览器,请直接放入json2.js

答案 1 :(得分:0)

我发现我的一个php没有正确发送JSON字符串!它现在以两种方式工作 - eval和json2.js非常感谢您的帮助! :)