0

うーん、誰かがここで私を助けてくれるか、正しい方向に向けてくれるかもしれません. (確かに、json、オブジェクト、Google ビジュアライゼーションなどに関して私はかなり新しいです) 基本的に、3 つの異なるフュージョン テーブルに対して同じページで 3 つの異なるクエリを実行しています。マーカーの。クエリを個別に実行して、マーカーの配列を作成すると、すべて問題ありません。ただし、同じページで 3 つのクエリを実行すると、応答関数でクエリを識別する方法が見つからないようです。

どんなヒントでも大歓迎です。必要に応じて、より多くの情報を提供させていただきます (不要なものを削除しようとしました)。

これは私が持っているものです。ありがとう

a) 関連するすべての変数を使用して関数「setFusionData()」を呼び出します。setFusionData("'LatLng','name'", 2729461); のようなもの (これは異なる変数で 3 回呼び出されます)

            function setFusionData(selColumns,tableId) {
              /****
                 an actual query example is this:
                http://www.google.com/fusiontables/gvizdata?tqx=reqId:1234&tq="select+'LatLng','name'+from+2729461"
              ****/

              var query = new google.visualization.Query(
                  'http://www.google.com/fusiontables/gvizdata?tqx=reqId:1234&tq='+ encodeURIComponent("SELECT "+selColumns+" FROM "+tableId+"")
              );  

              query.send(getFusionData);  //do something with the response    
            }


            function getFusionData(response) {

                /**             
                here, is the problem as i need to get the table id or reqId or anything that is uniquely passed on from "setFusionData" above
                also something like
                alert(JSON.stringify(response)) does not return any reqId or table id either
                ***/


                /*return rows/columns  and add values to an array of markers***/    
                    var numRows = response.getDataTable().getNumberOfRows();
                    var numCols = response.getDataTable().getNumberOfColumns(); 
                    for (i = 0; i < numRows; i++) {                     
                        /* add markers to array etc this  works fine***/    
                    }



            }

私もこのようなことを試しました:

function setFusionData(selColumns,tableId) {
......  
    query.send(getFusionData({reqId:tableId}));
}


function getFusionData(response) {
    alert(response['reqId']);//returns tableId. but how do i get the tableData ?

}

これでreqIdを取得できますが、テーブル*データ*は取得できません。したがって、IDまたはデータのいずれかしか取得できません:(

- - 編集 - - - - - - - -

もう少しいじった後(以下を参照)、クエリをブラウザに直接入力したときに返されるキーと値のペアは、スクリプトからの呼び出しによって返されるものとは異なるようです...つまり、次のようになります

            http ://www.google.com/fusiontables/gvizdata?tqx=reqId:1234&tq="select+'LatLng','name'+from+2729461"

ブラウザバーに直接入力すると返されます

            version:'0.5',reqId:'1234',status:'ok',table etc

ただし、スクリプト内から同じものを呼び出すと、次のようなものが返されます

                {
                "rj":"0.5","ef":"ok","pb":[],"qb":[],"h":"{"cols":
                        [{"id":"col2","label":"LatLng","type":"string"},{"id":"col1","label":"name","type":"string"}],
                    "rows":
                        [{"c":[{"v":"47.20572,12.70414"},
                    {"v":"Hohe Tauern"}]},{"c":[{"v":"47.5530395,12.925611"},{"v":"Berchtesgaden"}]},{"c":[{"v":"47.5585405,14.61887"},{"v":"Gesu00e4use"}]}],
                        "p":{"totalrows":3}
                    }"
                }

、したがって、「reqId」はありませんが、いくつかの暗号化キーのみです(reqIdのように見えるものもありません)......誰でも、なぜそれが/可能性があるのか​​ わかりますか?

4

1 に答える 1

0

JSON 応答を見るだけでわかる場合もあります。サンプル リクエストは次のように返します。

google.visualization.Query.setResponse({
    version:'0.5',
    reqId:'1234',
    status:'ok',
    table: {
      ...
    }
})

response.reqIdこれが応答であるリクエストを特定する必要がありましたが、これを使用しresponse.tableて新しいDataTableインスタンスを作成できます。

var dt = new google.visualization.DataTable(response.table);

または、複数のテーブルがあるため、次でインデックス付けされた配列に入れますreqId

tables[response.reqId] = new google.visualization.DataTable(response.table);

初めてvar tables = new Array()電話する前にやります。setFusionData()

于 2012-02-03T02:55:26.623 に答える