2012-08-10 93 views
0

$ .ajax给我一个有关我的PHP脚本返回的一些JSON的解析错误。我用这个函数来扩展我的PDO语句,手动编码JSON,希望为一些非常大的数据集保存一些内存。PHP手册JSON编码 - parseError

为什么不能工作?如果我在我的编辑器中将响应文本复制/粘贴到JSON.parse中,它可以正常工作。所以这可能是一些逃避问题?另外,如果我取出前三行(编码x,y和行)并将它返回一个数组,它就可以正常工作。只是不如我拼凑在一起的对象。

public function toJSON ($x, $y) { 

    echo "{x:" . json_encode($x) . ","; 
    echo "y:" . json_encode($y) . ","; 
    echo "rows:["; 

    $i = 0; 

    while ($row = $this->fetch(PDO::FETCH_ASSOC)) { 

    if ($i) echo ","; 
    echo json_encode($row, JSON_NUMERIC_CHECK); 

    if ($i > 0 && $i % 100 === 0) { 
     ob_flush(); 
     flush(); 
    } 

    $i++; 
    } 
    echo "]}\n"; 
} 
+3

我同意,很可能一个逃避问题,但我还是不明白你的推理不把你的数据放入一个数组中,并在数组中加入'json_encode()。 – Matt 2012-08-10 20:18:11

+0

我认为这对于服务器内存比对fetchAll更高效,然后进行编码。特别是在处理大量请求时,我需要这么做。 – 2012-08-10 20:27:29

+1

我认为@MattK有一个相当不错的答案(如果他正确地确定了你的问题,那就是)。 – Matt 2012-08-10 20:28:35

回答

1

你确定你把它放在正确的格式吗?

你的名字需要用引号括起来,因为它是一个字符串。如果你的值是一个字符串,它也需要在引号中。

EX/

echo "{x:" . json_encode($x) . ",";

需要像这样:

echo '{"x":' . json_encode($x) . ',';

+0

你说得对。谢谢,很好! – 2012-08-10 20:29:17