1

私はこれをさまざまな方法で解決しようとしてきましたが、期待どおりに機能していません。それほど大したことではないと感じています (本当にそう願っています) が、Ajax と jQuery に関する私の経験とスキルは限られていますなぜ私はあなたの専門知識に訴えているのですか!

ここにあるものと同様のチャートに取り組んでいますhttp://www.jqplot.com/tests/data-renderers.php。しかし、私の場合、ユーザーが選択ボックスから選択した値に応じてjsonファイルが生成されます。これを達成するために、2 つのファイルと ajax 呼び出しを使用しています。

-AnnualB.htmlは、選択ボックスが配置され、グラフが表示されるファイルです。

-Index.phpは、データベースへのクエリが作成され (AnnualB.html の選択ボックスから取得した値を使用)、json 配列が生成されるファイルです。

AnnualB.html では、GET メソッドを使用して、selectbox から値を取得し、json データを生成する Index.php に送信します。そのjsonデータに基づいて、チャートをAnnualBで作成する必要があります...ここで私の問題が発生します。グラフを生成する関数は正常に機能しており、選択値を送信して json を返す呼び出しも機能しています (Firebug で確認済み)。チャートを生成する関数に json データを渡すことができます。

AnnualB.html の私のコードは次のようになります (無関係な情報を ... で省略します):

チャートを生成する関数(jsonデータが渡されればOK)

function CreateGraph() { 
 $(document).ready(function(){
var ajaxDataRenderer = function(url, plot) {
    var ret = null;
    $.ajax({
        async: false,
        url: url,
        dataType:'json',
        success: function(data) {
            ret = data; }
    });
   return ret; };
$.jqplot.config.enablePlugins = true;
var jsonurl = "./index.php";
var plotData = ajaxDataRenderer(jsonurl); 
var series = ...
plot1 = $.jqplot('Chart1', series,{...}}

Ajax 呼び出し(おそらく私のミス/脱落がある場所)

function LoadGraph(int)
{
if (window.XMLHttpRequest)
  {xmlhttp=new XMLHttpRequest();}
else
  {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.open("GET","index.php?tasel="+int,true);
xmlhttp.send();
xmlhttp.onreadystatechange=function()
  {
    CreateGraph(int)
    }
}

セレクトボックス

<select name="tasel" size="1" onchange="LoadGraph(this.value)">
<option value="">Select accounts type:</option>
  <option value="3">Tuloslaskelma</option>
  <option value="2">Tasevastattava</option>
  <option value="1">Tasevastaava</option>
</select>

Index.php の関連コードは次のようになります (選択ボックス (tasel) の値が渡されると正常に動作します):

$tasel = $_REQUEST['tasel'];
if ($tasel == ...2)
{...}
.
.
.
echo "[",$selite, ",";// These 2 variables create the json array
echo $finaljson, "]";

ご理解とご協力をよろしくお願いいたします。

4

2 に答える 2

1

この質問への答えは、私が予想していたよりも単純であることに気づきました。ajax呼び出し全体を行う代わりに、関数でfunction LoadGraph(int)tasel値を呼び出して、次?tasel="+intのようなグラフを生成する必要がありました(すでにajax呼び出しを行っています)。

function CreateGraph() { 
    $(document).ready(function(){
        var ajaxDataRenderer = function(url, plot) {
            var ret = null;
            $.ajax({
                async: false,
                url: url,
                dataType:'json',
                success: function(data) {
                    ret = data; 
                }
            });
            return ret; 
        };

    $.jqplot.config.enablePlugins = true;
    var jsonurl = "./index.php?tasel="+int;
    var plotData = ajaxDataRenderer(jsonurl); 
    var series = ...
    plot1 = $.jqplot('Chart1', series,{...}
}
于 2013-02-11T08:22:01.013 に答える
0
var plot1 = undefined;
var plotOptions = undefined;

function CreateGraph() { 
    $.ajax({
        async: false,
        url: "./index.php",
        dataType:'json',
        success: function(data) {
            var series = fn... // Convert your json Data to array
            if(plot1 != undefined)
            {
                plot1.destroy();
            }
            plot1 = $.jqplot('Chart1', series, plotOptions);
        }
    });
}

$(function(){
    $.jqplot.config.enablePlugins = true;
    plotOptions = {...}; // jqPlot options
    CreateGraph();
});

これがあなたを助けることを願っています..

于 2013-02-08T14:06:04.780 に答える