0

onclick -> mysql query -> javascript;で尋ねられた以前の質問を続けています。同じページ

これは、名前をドロップダウンするための onchange 関数です。各ドロップダウンが変更されると呼び出されます。アイデアは、各ランナーの名前をphpページに送信してmysqlクエリを実行し、3つの配列を返してjavascriptに入力することです。

function sendCharts() {
var awayTeam = document.getElementById('awayRunner').value;
var homeTeam = document.getElementById('homeRunner').value;        


if(window.XMLHttpRequest) {
    xmlhttp14 = new XMLHttpRequest();

}
else {
    xmlhttp14 = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp14.onreadystatechange = function() {
    if(xmlhttp14.readyState == 4 && xmlhttp14.status == 200) {

   var parts = xmlhttp14.responseText.split(','); //THIS IS WHAT IS RETURNED FROM THE MYSQL QUERY. WHEN I ALERT IT, IT OUTPUTS IN THE FORM 14,15,18,16,17,12,13 

          ... code that generates the chart 
        series: [   {
                        name: document.getElementById('awayRunner').value,
                        data: [parts,','], //THIS IS WHERE AN ARRAY MUST BE ENTERED. THIS OUPUTS ONLY ONE NUMBER 
                        type: 'column',
                        pointStart: 0
                        //pointInterval
                    },

                    {

                        name: document.getElementById('homeRunner').value,
                        data: parts, // TRIED THIS
                        type: 'column',
                        pointStart: 0
                        //pointInterval
                    },

                    {
                        name: 'League Avg',
                        data: [], //THIS IS WHERE 3rd ARRAY MUST BE ENTERED
                        type:'spline',
                        pointStart: 0
                        //pointInterval
                    },
                ]
    });

    }
}
xmlhttp14.open("GET", "getCharts.php?awayRunner="+awayRunner+"&homeRunner="+homeRunner, true);
xmlhttp14.send();

}

私のphpコードは次のようになります。ご覧のとおり、コードを生成するために JavaScript のさまざまな場所に入力するために返す必要がある 3 つの配列があります。

$away=$_GET['awayRunner'];
$home=$_GET['homeRunner'];

$db=mydb;



$homeRunner=array();
$awayRunner = array();
$totalOverall= array();

$getHome="select column from $db where tmName = '$home'";
$result2 = mysql_query($getHome);
while($row = mysql_fetch_array($result2)){
$homeRunner[]= $row['column'];
}

$getAway="select column from $db where tmName ='$away'";
$result22 = mysql_query($getAway);
while($row2 = mysql_fetch_array($result22)){
$awayRunner[]= $row2['column'];

}

$week = 0;
while($week<20){
$week++;
$teamCount = "select count(column) from $db where week = $week";
$resultTeam =  mysql_query($teamCount);
$rowTeam = mysql_fetch_array($resultTeam);
$t = $rowTeam['count(column)'];

$getLeague = "select sum(column) from $db where week = $week";
$resultLeague = mysql_query($getLeague);
while($row3 = mysql_fetch_array($resultLeague)){
    $totalOverall[]=$row3['sum(column)']/$t;
    }
}
echo join(',',$awayRunner);

現在、このようにすることで、チャートは配列の 2 番目の値のみを出力します。たとえば、var parts が 23、25、26、24、23 の場合、25 のみが表示されます。

以前の質問の結果、次の回答が得られました -

  1. ページをロードします。
  2. ユーザーがオプションを選択します。
  3. onChange リスナーは AJAX リクエストを開始します
  4. サーバーはリクエストを受信して​​処理します
  5. サーバーは、依存選択のオプションの JSON 配列を返します
  6. クライアント側の AJAX 送信者は応答を返します
  7. クライアントは、選択を更新して、JSON 配列からの値を取得します。

# の 5 ~ 7 で迷っています。誰かがこれを実行するコードの例を提供できますか? 通常、私は指示を求めるだけですが、この問題に何日も悩まされています。自分のサイトにグラフを表示するという考えを捨てる準備ができています。前もって感謝します

EDIT

これは、1 つの要求だけを送受信するために行った最初の変更です。

<script>
$(function(){
    $("#awayRunner").change(function(){ 
        $.ajax({
        type: "POST",    
        data: "data=" + $("#awayRunner").val(),
        dataType: "json",
        url: "/my.php",
        success: function(response){
            alert(response);  
        }
        });
    });
});

アラートボックスに表示されるデータは、12,15,16,15 の形式です。ここで、data: 応答を入力すると、それぞれの 2 番目の数値のみがグラフに表示されます。何か案は?

EDIT

OK、応答の情報が文字列であることがわかりました。チャートで使用できるようにするには、parseInt を使用して INT に変換する必要があります。現在、私は持っています

$("#awayTeam").change(function(){ 
        $.ajax({
        type: "POST",    
        data: "away=" + $("#awayTeam").val(),
        dataType: "json",
        url: "/getCharts.php",
        success: function(response){
              var asdf = [];
              asdf[0] = parseInt(response[0]);
              asdf[1] = parseInt(response[1]);
              asdf[2] = parseInt(response[2]);
              asdf[3] = parseInt(response[3]); 
              alert(asdf);

これをよりきれいにする関数を書く必要があります。

4

1 に答える 1

0

信じられませんが、やっと手に入れました。onchange メソッドを使用して MYSQL クエリを刺激し、Highchart に結果を表示する方法を次に示します。主な問題は、返された JSON 配列が、INT に変換する必要がある文字列であったことです。次に、resultArray 変数が、highChart の data: 部分で使用されます。

$(function(){
    $("#awayTeam").change(function(){ 
        $.ajax({
        type: "POST",    
        data: "away=" + $("#awayRunner").val(),
        dataType: "json",
        url: "/getCharts.php",
        success: function(response){
              var arrayLength = response.length;
              var resultArray = [];
              var i = 0;
              while(i<arrayLength){
                  resultArray[i] = parseInt(response[i]);
                  i++;
              }            

PHPコードでは、配列は次のようにJSONとして返される必要があります

echo json_encode($awayRunner);
于 2012-09-25T04:31:08.917 に答える