2013-04-21 32 views
0

我知道這已經被問很多次之前,但我仍然有readaing關於這個問題的所有其他職位......我某處的PHP代碼-and的JavaScript它與後一個問題傳遞PHP數組在JavaScript中使用正坐在我的陣列中正在走路。使用json_encode

在所附的代碼,我的PHP的調試的回聲。當我從javascript中切出php部分並單獨運行echo時,它會告訴我它正在構建我的json_encoded數組。

在JavaScript立即PHP的結束後我分配PHP來JavaScript變量,所以可將其用於進一步的處理(繪製圖)。放入顯示語句,顯示php調用結果的內容以將數組轉換爲javascript,顯示數組爲空。

如果我剪切和粘貼的PHP回聲的輸出,並指定這個字面的JavaScript chartData數組,那麼一切工作正常。爲什麼JavaScript沒有獲得php數組內容?

下面的代碼剪斷:

<script> 
...some java script stuff; 
<?php 
// Define the mySQL db connection 
$db = new PDO('mysql:host=localhost;dbname=remets;charset=UTF-8', 'remets', 'remets',   array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
// Define SQL query to fetch data from mySQL 
$stmt = $db->query("SELECT WeekNumber,XAxisCategory,YAxisValue FROM Metric WHERE ReportID = 'Q3' ORDER BY WeekNumber,XAxisCategory ASC"); 

           // declarations 
           $amData = array(); 
           $amArray = array(); 
           $ctrinner = 0; 
           $ctrouter = -1; 
           $prevweek = "9999"; 

           // Fetch data from mySQL and put it in an array in the format we need 
           while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
            if ($prevweek !== $row['WeekNumber']) { 
             $ctrouter++; 
             $ctrinner = 0; 
             $amData[$ctrouter]["week"] = "".$row['WeekNumber']; // Prepending (or appending) the empty string makes the json encoding think the week number is a string, which is MUST have for AmCharts 
            } 
            $ctrinner++; 
            $amData[$ctrouter][$row['XAxisCategory']] = $row['YAxisValue']; 
            $prevweek = $row['WeekNumber']; 
           } 

            // Using json_encode puts the data into an array format that we can use in a javascript 
            $amJSONArray = json_encode($amData); 

            // Echo is for debugging only. 
            // echo $amJSONArray; 


          ?> 

          var chartData = <?php echo $amJSONArray; 
?>; 

...more javascript stuff; 

</script> 

@Mahdi:所述的print_r的輸出是:陣列([0] =>數組([周] => 1301 [接受] => 30失敗] => 5 [合格] => 20 [計劃] => 5 [跳過] => 5 [未知] => 26)[1] =>數組([周] => 1302 [接受] => => 2 [通過] => 25 [計劃] => 2 [跳過] => 3 [未知] => 20)[2] =>陣列([周] => 1303 [接受] => => 26 [合格] => 29 [計劃] => 26 [跳過] => 26 [未知] => 10))

@Mahdi:這是jscript代碼,因爲我特里d在本論壇和其他論壇的其他帖子中推薦的許多不同選項 - 它們都不起作用。我可以運行php代碼,並且工作正常。如果我在之前發佈的php代碼片段中複製echo代碼的輸出,並將其簡單地分配給chartData(即:chartData =「」; 我的圖表生成的很好。問題不在於圖表工具,但不知何故數組內容只是不這是直接在它下面的.js文件的JavaScript可見 感謝您的時間,不外現在

      //var chartData = "<?php print($amJSONArray); ?>"; // This just returns the literal in the speech marks 
          //var chartData = '<?php print($amJSONArray); ?>'; // This also returns the literal in the speech marks 
          //var chartData = "<?php echo($amJSONArray); ?>"; // This just returns the literal in the speech marks 
          //var chartData = '<?php echo($amJSONArray); ?>'; // This also returns the literal in the speech marks 
          //var chartData = <?php echo ($amJSONArray) ?>;  // This returns empty 
          //var chartData = <?php echo $amJSONArray ?>;  // This returns empty 
          //var chartData = (<?php echo $amJSONArray ?>);  // This returns empty 
          //alert(chartData);                 // Returns empty - just showing the contents of the array if I do the json_encode within the php part 
          //alert(<?php echo $amJSONArray ?>);        // Returns empty - just showing the contents of the array if I do the json_encode during the array fetch 

UPDATE:。 我覺得有某種根本性錯誤在我身邊事我使用了一個非常簡單的例子,它應該在屏幕上寫上「hello world」,但它什麼也沒有返回。如果我用'alert'替換'write',那麼它仍然在alert窗口中沒有顯示任何內容。沒有工作?代碼是:

<?php 
    $testvar = "Hello World"; 
?> 
<html> 
<head> 
<script type="text/javascript"> 
function hello() 
{ 
    // create JavaScript variable, fill it with Php variable 
    var testvar = "<? print $testvar; ?>"; 
    // output to screen 

    document.write(testvar); 
} 
</script> 
</head> 

<!-- Call JavaScript function to display variable --> 
<body onload="hello()" > 
</body> 
</html> 
+0

那麼,你認爲'$ amJSONArray'中的_encoded_ JSON是一個字符串? – dbf 2013-04-21 12:54:30

+0

不,它是一個數組,每行包含1個字符。如果我將echo更改爲echo $ amJSONArray [];它顯示該行的字符(正確)。 – user2301506 2013-04-21 13:03:05

+0

'print_r($ amData)'看看你在那裏有什麼......如果你看到每行有一個「char」,但它應該是一個'Array',這意味着你已經分配了一個String而不是'Array' ... – Mahdi 2013-04-21 14:02:50

回答

1

如果你能夠訪問數據作爲一個字符串,你可以嘗試使用內置的JSON.parse()將其轉換成可用的JavaScript。

+0

也許我完全錯過了json_encode的要點。我以爲我需要json_encode作爲將數組返回給javascript的一種方式,所以我可以將它與amcharts一起使用。 Amcharts預計會有一個json_encoded數組(如果我自己運行php代碼時,複製+粘貼php echo語句的輸出,這個方法就行得通)。整個問題似乎是從php到js代碼的數組交接。在PHP中一切都很好,但我正在努力如何獲取該數組的內容回到JavaScript,所以我可以將它作爲參數傳遞給amcharts。這可能是非常明顯和簡單的事情。 – user2301506 2013-04-22 07:38:56

+0

PHP json_encode將數據傳遞爲JSON,而不是javascript。它本質上被表示爲一個**字符串**,所以這就是爲什麼它需要JSON.parse javascript函數將其解釋爲javascript。 – strakez 2013-06-20 18:39:38