2013-04-27 41 views
-2

我while循環:
我試圖插入json_decodejson_encode也是他們中的每一個沒有其他的,但有沒有運氣。我不斷收到錯誤JSON.parse:後JSON數據意外非空白字符我有一個while循環和裏面我想PHP轉換爲有效的JSON

while ($row = $res->fetchRow()){ 
    $resGold = $row['gold']; 
    $resSilver = $row['silver']; 
    $resBronze = $row['bronze']; 
    $resGdp = $row['gdp']; 
    $resPopulation = $row['population']; 
    $resCountry = $row['country_name']; 
    $gold_score = ($resGold * $gold_value); 
    $silver_score = ($resSilver * $silver_value); 
    $bronze_score = ($resBronze * $bronze_value); 
    $score_pop = (($gold_score + $silver_score + $bronze_score)/$resPopulation); 
    $score_gdp = (($gold_score + $silver_score + $bronze_score)/$resGdp); 
    if($population == 'true'){ 
     $result = $res->fetchRow(); 
     $result['score'] = "$score_pop"; 
     json_encode($result); 
    } 
    else if($gdp == 'true'){ 
     $result = $res->fetchRow(); 
     $result['score'] = "$score_gdp"; 
     json_encode($result); 
    } 
} 
if($population == 'false' && $gdp == 'false'){ 
    echo "Please select either population or gdp from view.htm"; 
} 

我明白json_encode必須跳出while循環,但不知道如何做到這一點。
任何幫助表示讚賞。謝謝。

+0

你在嘗試**編碼**你還沒有提供這些信息。 – 2013-04-27 01:45:07

+0

@CurtisCrewe我想編碼'$ result',如上面的代碼所示。當'json_encode'在while循環中時,我得到了空白錯誤,但是當我把它放在外面時,我只得到1(最後一個)結果而不是所有結果。 – 2013-04-27 01:48:23

回答

1

您引用的特定錯誤(JSON.parse:JSON數據後的意外非空白字符)是Javascript正在解碼它時。

json_encode從混合值參數中返回一個字符串。 json_encode Doc

您可能需要echo以外的結果或將其添加到另一個變量稍後輸出。 例如。

while ($row = $res->fetchRow()){ 
    $resGold = $row['gold']; 
    $resSilver = $row['silver']; 
    $resBronze = $row['bronze']; 
    $resGdp = $row['gdp']; 
    $resPopulation = $row['population']; 
    $resCountry = $row['country_name']; 
    $gold_score = ($resGold * $gold_value); 
    $silver_score = ($resSilver * $silver_value); 
    $bronze_score = ($resBronze * $bronze_value); 
    $score_pop = (($gold_score + $silver_score + $bronze_score)/$resPopulation); 
    $score_gdp = (($gold_score + $silver_score + $bronze_score)/$resGdp); 
    if($population == 'true'){ 
     $result = $res->fetchRow(); 
     $result['score'] = "$score_pop"; 
     echo json_encode($result); 
    } 
    else if($gdp == 'true'){ 
     $result = $res->fetchRow(); 
     $result['score'] = "$score_gdp"; 
     echo json_encode($result); 
    } 
} 
if($population == 'false' && $gdp == 'false'){ 
    echo "Please select either population or gdp from view.htm"; 
} 

如果你想編碼多行,並返回所有這些,你會過得更好添加$result到一個數組和編碼的while循環外,如果你不這樣做,你的JSON字符串可以看看如:

{gold:123,silver:456,bronze:789}{gold:987,silver:654,bronze:321} 

這是無效的JSON,因爲它只能一次解析一個對象或數組。下面是一個有效的JSON字符串

[{gold:123,silver:456,bronze:789},{gold:987,silver:654,bronze:321}] 

這是數據的數組表示形式,將解析爲您的JSON編碼對象的列表。這是您的代碼在使用數組來存儲JSON之前對其進行回顯。

$results = array(); 
while ($row = $res->fetchRow()){ 
    $resGold = $row['gold']; 
    $resSilver = $row['silver']; 
    $resBronze = $row['bronze']; 
    $resGdp = $row['gdp']; 
    $resPopulation = $row['population']; 
    $resCountry = $row['country_name']; 
    $gold_score = ($resGold * $gold_value); 
    $silver_score = ($resSilver * $silver_value); 
    $bronze_score = ($resBronze * $bronze_value); 
    $score_pop = (($gold_score + $silver_score + $bronze_score)/$resPopulation); 
    $score_gdp = (($gold_score + $silver_score + $bronze_score)/$resGdp); 
    if($population == 'true'){ 
     $result = $res->fetchRow(); 
     $result['score'] = "$score_pop"; 
     array_push($results,$result); 
    } 
    else if($gdp == 'true'){ 
     $result = $res->fetchRow(); 
     $result['score'] = "$score_gdp"; 
     array_push($results,$result); 
    } 
} 
if($population == 'false' && $gdp == 'false'){ 
    echo "Please select either population or gdp from view.htm"; 
} 
else 
{ 
    //Note: This is in the 'else' statement as echoing the JSON then that string 
    //  will also cause errors as it ends up not being valid JSON anymore 
    echo json_encode($results); 
} 

正如我在上面的例子,你是呼應字符串就選擇人口或GDP,因爲這是不JSON編碼及以上,否則在JSON編碼的部分,你可以嘗試解碼時遇到解析錯誤它。如果此PHP頁面旨在返回JSON編碼數據,並且您的錯誤消息不是JSON編碼,那麼無論獲取值是什麼,都可能會出現問題。