2016-05-15 6 views
1

今日、ドーナツチャートのJavascriptにPHP変数を渡すのは難しい時期です。私は今これをうまくやっていて、まだそれを理解することができませんでした。私はここの記事や多数のGoogle検索をチェックしましたが、まだ答えを見つけることができませんでした。私が達成しようとしていることは次のとおりです。JavaScript内のPHP変数をクォートするJavaScript用JavaScript変数ドーナツチャート

私は、特定のPHPページへのWebリファラーのために、MySQLからJavascriptのドーナツチャートにデータをプッシュしようとしています。 Javascriptのチャートの構文は以下のようなある:

<script> 
Morris.Donut({ 
element: 'css div', 
data: 
[ 
{ label: '<?php echo($graph["referrer"]); ?>', value: '<?php echo($graph["chart"]); ?>' }, 
] 
}); 
</script> 

$グラフ[「リファラは、」]変数には、このような「Google.com」としてリファラ名を保持し、$グラフ[「数」]変数を保持していますリファラー名の対応するレコード数を数字(「5」など)で示します。

"{label"で始まるJavascript行は、ドーナツチャートの一部を表します。最初にMySQLから引き出されたデータはfetchArray()で処理されますが、私がしようとしているのは、PHPのforeach文(foreach($ Array as $ graph)など)を使って各 "{label" fetchArray()によって返される参照元の名前の数に基づいて動的に生成できます。私はこの仕事をするために考えられるすべてのことを考えました--Javascriptライン全体をPHPに格納してからJavascriptなどにエコーしますが、PHPでは常に内部エラーが発生します。

答えが私の鼻の下にあると確信しています。ありがとうございました。

+0

_ "これは常にPHPで内部エラーが発生する" _、エラーは何ですか?どのようなコード行が指摘していますか? –

+0

単に実行に失敗し、エラーが表示されます。500 –

+0

「私は大きな問題がありますが、私は公に話したくありません」と言うWebサーバーの方法は500エラーです。サーバーのエラーログを見て、何が間違っているのか明確なメッセージが表示されます。 –

答えて

2

使用json_encode()クリーンなデータオブジェクトを生成する:PHPで

:あなたのJavaScriptで

$data = array(array('label' => $graph["referrer"]), 'value' => $graph["chart"])); 

を。

data: <?php echo json_encode($data); ?> 
+0

ありがとうございますが、このコードでは、 "{"から "}"までのJavascript文字列全体を生成しようとしているのに対し、このコードでは "Google.com 2"のみが表示されます。 –

+0

"Google.com 2"は明らかに 'json_encode()'が生成する出力ではありません。あなたは実際に生成されたソースコードを見ていますか?あなたはそれを正しい場所にエコーしていますか? –

+0

Ops my bad。さて、私たちはどこかに行くと思う。ループのコードは次のとおりです:<?php foreach($ Array as $ graph):+上のPHPコード+ echo json_encode($ data);しかし、出力は次のとおり { "0":{ "ラベル": "Facebookの"}、 "値": "2"}、{ "0":{ "ラベル": "直接"}、 "値":」 2 "} {" 0 ":{" label ":" Microsoft "}、" value ":" 1 "} {" 0 ":{" label ":" Ask.com "}、" value " } {"0":{"label": "Google"}、 "value": "1"} –

1

php変数の配列をjsスクリプトに渡す正しい方法は、jsonです。ここであなたがする必要があるものです:

PHP一部:

$sql = 'select * from ....'; // your query 
// execute query 
// as I don't know what mysql api do you use, 
// it's kinda pseudo-code 
// but the main idea is to get all rows 
// you need in one array `$graphs` 

$graphs = array(); 
while ($graph = fetch_array()) { 
    $graphs[] = array(
     'label' => $graph["referrer"], 
     'value' => $graph["chart"], 
    ); 
} 

JS一部:

<script> 
Morris.Donut({ 
    element: 'css div', 
    data: <?php echo json_encode($graphs); ?> 
}); 
</script> 
+0

返信いただきありがとうございます。だから、JavascriptでPHPの変数を使用することは、すでに私が把握できたことでした。私は、配列内の参照元のインスタンスごとに、 "{label:"で始まり "}"で始まる行全体を生成するようPHPに要求します。私は実際に必要なすべてのforeach($ arrayofreferrers $グラフ)を使用しているループのためにPHPコードで、Javascriptコード全体を配置する方法を把握することです、PHPエコーの内部。 foreachループは、$ arrayofreferrersで言及された参照元の数をエコーXで実行します。 –

+0

決定するのはあなた次第ですが、私が答えたことを強くお勧めします。ところで、もしあなたが '' 'で' label 'の値を持つなら、何を得るでしょうか? –

+0

あなたのコードを試していますが、何も返しません。配列([0] =>配列([referrer] => Facebook [count] => 2)[1] =>配列([referrer] => Direct [count] => 2) [2] =>配列([参照元] => Microsoft [数] => 1)[3] =>配列([referrer] => Ask.com [count] => 1)[4] =>配列([私は多次元配列を使用しているので、それはおそらく動作していないのでしょうか?申し訳ありませんが、ラベル値についてのご質問は理解できません。 –

1

あなたは全く$graphの変数をループされていません。

<script> 
    Morris.Donut({ 
    element: 'css div', 
    data: [{ 
     label: '<?php echo($graph["referrer"]); ?>', 
     value: '<?php echo($graph["chart"]); ?>' 
    },] 
    }); 
</script> 

上記のコードでは、1つの変数のみがレンダリングされます。私はあなたがここでループのいくつかの種類を持っている必要があり、信じる:

<script> 
    Morris.Donut({ 
    element: 'css div', 
    data: [ 
<?php foreach (/* some loop */) { ?> 
     { 
     label: '<?php echo($graph["referrer"]); ?>', 
     value: '<?php echo($graph["chart"]); ?>' 
     }, 
<?php } ?> 
    ] 
    }); 
</script> 

それとも最良の方法は、JSONに出力するアレイとjson_encode()を使用することです。

+0

申し訳ありませんが、私のforeachのコードは