1

MySQL から情報を取得する php ファイルを使用して円グラフを作成しようとしています。JSON はそれをエンコードし、それを JS ファイルに送信して円グラフを作成します。ここに投稿された他の質問のほとんどを見てきましたが、どれもまったく役に立ちません。適合するように見えるコードに一致するようにコードを書き直そうとしましたが、何も機能していません。
私のphpファイルは次のとおりです。

$shelvDate = $_POST['shelvDate'];
$x = 0;

// get information from database for shelving chart
$shelv = $conn -> query ("SELECT sum(quantity) as qty, date_process, created_by, first_name from inventory LEFT JOIN users on users.user_id =inventory.created_by
    WHERE date_process = '$shelvDate' GROUP BY created_by" );
$num_rows = $shelv->num_rows;

if($num_rows > 0){
    while($row = $shelv->fetch_assoc()) {
        if($row['qty'] > 0){
            $qtyArray[$x] = $row['qty'];
            $nameArray[$x] = $row['first_name'];
        }
        $x++;

        $pairs = array('first_name' => $nameArray, 'qty' => $qtyArray);
    } // end of while statement
} //end of if statement

$conn->close();
echo json_encode(array($pairs));

データを取得しようとするとajax/js、エラーが発生します。私JSは:

$("#getRecords").live('click', function() {
    var ajaxDataRenderer = function(url, plot, options) {
        var ret = null;
        $.ajax({
            type: "POST",
            async: false,
            url: url,
            dataType:"json",
            data: ({shelvDate: $('#shelvDate').val()}),
            success: function(data) {
                for(var x=0; x<data.first_name.length; x++) {
                    var info = [data.first_name[x], data.qty[x]];
                    ret.push(info);
                }
        }); // end of ajax call

        return ret;
    }; // end of ajaxDataRenerer call

    // The url for our json data
    var jsonurl = "shelvChart.php";
    var plot2 = $.jqplot('shelvChart', jsonurl,{
    seriesDefaults: {
           // Make this a pie chart.
           renderer: jQuery.jqplot.PieRenderer,
           rendererOptions: {
               // Put data labels on the pie slices.
               // By default, labels show the percentage of the slice.
               showDataLabels: true
           }
        }, 
        title: "Books Shelved",
        dataRenderer: ajaxDataRenderer,
        dataRendererOptions: {
            unusedOptionalUrl: jsonurl
        }
    });
});

私はまだAJAXとJSに慣れていないので、何が間違っているのか、ここからどこへ行くべきなのかさえわかりません。どんな助けでも大歓迎です。
ジム

4

1 に答える 1

1

取得している実際の文字列を確認することは非常に便利です。呼び出し後にJSON取得する方法がわからないため、または他のアラートを参照している可能性があります。name[object,object],qty[object,object]alert(ret)

ajaxDataRendererとにかく、あなたの問題は、関数によって返される配列が円グラフで受け入れられる適切な形式であることを確認する必要があるということです。

したがって、たとえば、PHPまたはコード内で、返される配列が次の形式であるJavaScriptことを確認する必要があります。ret

ret = [[name[0], qty[0]], [name[1], qty[1]], ...]; 

このようにして、name 配列にあるすべての値がラベルとして使用され、qty 配列がパーセンテージが評価される値として使用されます。

グラフのデータを準備する方法を示す同様のアプローチがこの回答に示されています。

于 2012-05-23T09:07:56.510 に答える