0

嗯,也许有人可以在这里帮助我或指出正确的方向,因为我已经把头撞在墙上好几天了,似乎没有任何用处。(诚​​然,我在 json、objects、google visulization 等方面还很陌生)本质上,我在同一页面上针对 3 个不同的融合表运行 3 个不同的查询,作为回报,它们应该返回一个包含 3 个不同 xets 的数组的标记。一切都很好,当我单独运行查询并制作一个标记数组时。但是,在同一页面上运行 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 或 data :(

- - 编辑 - - - - - - - -

在搞砸了一点之后(见下文),直接在浏览器中输入查询时返回的键/值对似乎与脚本调用返回的键/值对不同......即以下

            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);

或者,由于您有多个表,因此将 then 放入一个以reqId

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

你会在第一次var tables = new Array()打电话之前做。setFusionData()

于 2012-02-03T02:55:26.623 回答