これは以前に何度も尋ねられたことを知っていますが、この件に関する他のすべての投稿を読んだ後でも問題があります...私のphpコードとそれが置かれているjavascriptの間のどこかで、私の配列はうまくいきません。
添付のコードには、php のデバッグ用のエコーがあります。JavaScript から php セクションを切り取り、エコーをオンにして個別に実行すると、json_encoded 配列が正しく構築されていることがわかります。
php の直後の javascript で、php を javascript 変数に割り当て、それをさらに処理 (グラフのプロット) に使用できるようにします。php 呼び出しの結果のコンテンツを表示して、配列を JavaScript に取得するための display ステートメントを挿入すると、配列が空であることを示します。
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 の出力は次のとおりです: Array ( [0] => Array ( [week] => 1301 [Accepted] => 30 [Failed] => 5 [Passed] => 20 [Planned] => 5 [スキップ] => 5 [不明] => 26 ) [1] => 配列 ( [週] => 1302 [受理] => 25 [失敗] => 2 [合格] => 25 [計画] => 2 [スキップ] => 3 [不明] => 20 ) [2] => 配列 ( [週] => 1303 [受理] => 26 [失敗] => 26 [合格] => 29 [計画] => 26 [スキップ] => 26 [不明] => 10 ) )
@Mahdi: これは、php の直後の jscript コードです (このフォーラムや他の投稿で推奨されているさまざまなオプションをたくさん試したため、コメントアウトされています。どれも機能しません。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
更新: 私の側で根本的に間違ったことが起こっていると思います。画面に「hello world」と表示する非常に単純な例を使用しましたが、何も返されません。「書き込み」を「アラート」に置き換えても、アラート ポップアップには何も表示されません。これが機能しない理由を誰かが知っていますか? コードは次のとおりです。
<?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>