2012-02-03 40 views
0

嗯,也許有人可以幫助我在這裏或指向正確的方向,因爲我已經撞了我的頭靠在牆上好幾天了,似乎不是在任何地方都有用。 (並承認我對json,對象,谷歌visulization等方面相當新) 本質上,我在同一頁上運行3個不同的查詢對3個不同的融合表,它們在返回時應該返回一個3的數組不同的標記。 一切都很好,當我單獨運行查詢,並使標記數組。然而,在同一頁面上運行3個查詢,我似乎無法找到一種方法來識別響應函數中的查詢。谷歌可視化API,確定響應函數中的tableid

任何提示非常讚賞。我會很樂意提供更多的信息,如果需要(試圖擺脫一些不必要的東西)

這就是我所擁有的。謝謝

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,但不表*數據*。所以我只能得到任何標識或數據:(

----編輯----------------

了一下週圍更搞亂後(見下文)似乎所有鍵入查詢到瀏覽器時,你得到的返回鍵/值對直接比什麼獲取通過電話從腳本返回不同的...即以下

  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要麼)......任何人想法爲什麼會/可能是?

回答

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

在第一次致電setFusionData()之前,您會做var tables = new Array()

+0

嗯,我可能有點密集(很可能)。我嘗試了以下內容: [code] function getFusionData(response){ var dt = new google.visualization.DataTable(response.reqId); alert(JSON.stringify(dt)) } [code] 但我只能得到cols/rows/p(不管是什麼),但沒有reqID – olly 2012-02-03 03:06:24

+0

我搞砸了多一點,但最終,它歸結爲to,that response.table returns'undefined',因爲'response'實際上返回如下內容: '{ 「rj」:「0.5」, 「ef」:「ok」, 「pb」:[], 「 qb「:[] 」h「:」 \t {\「cols \」: \t \t [{\「id \」:\「col2 \」,\「label \」:\「LatLng \ \ 「類型\」:\ 「字符串\」},{\ 「ID \」:\ 「COL1 \」,\ 「標籤\」:\ 「名稱\」,\ 「類型\」:\ 「字符串\」} ], \t \「rows \」: \t \t [{\「c \」:[{\「v \」:\「47.20572,12.70414 \」}, \t {\「v \」:\「Hohe Tauern \」}]},{\ ç\ 「:[{\」 v \ 「:\」 47.5530395,12.925611 \ 「},{\」 v \ 「:\」 貝希特斯加\ 「}]},{\」 C:\ 「:[{\」 v \ 「:\」47.5585405,14.61887 \「},{\」v \「:\」Ges \\ u00e4use \「}]}],\ \t \t」p \「:{\」totalrows \「:3} \t}「 }' – olly 2012-02-03 03:51:17

+0

用google.visualization.DataTable(response.table)替換google.visualization.DataTable(response.reqId),它應該可以工作。 – miguev 2012-02-03 07:35:14