2012-08-10 71 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