2011-11-08 35 views
1

在下面的虛擬代碼中,通常根據Google的API示例進行拆分,其中有三個函數 - API需要兩個函數和一個RunMe()函數。如果電子表格請求無效,我可以訪問它從handleQueryResponse()函數返回的錯誤消息。但爲了我的目的,我需要能夠從runMe()函數內測試response.isError()的存在。這似乎很簡單,但我似乎無法從handleQueryResponse()之外獲取該響應對象。這可能是由於我的JavaScript新手狀態,或者因爲API有些奇怪。在Google可視化API中訪問響應狀態

我也覺得很奇怪,取消註釋console.log(query);在getTableMeta()函數中產生一個「Er」對象,它似乎只是一個原型,而不是實際查詢的表示。

感謝您的建議。

下面的電子表格ID無效,最後的「z」表示無效,刪除時有效。

function runMe() { 
    var foo = getTableMeta('0AtP_YtDJ532RdDcxZUl6Zkl4YkxKcEYzbld4ZDA4SlEz'); 
    // console.log(response); 
    // console.log(response.getMessage()); 
    // console.log(foo.getMessage()); 
} 


// Get table metadata from Google 
function getTableMeta(spreadsheet_id) { 

    var query = new google.visualization.Query('https://spreadsheets.google.com/a/google.com/tq?key=' + spreadsheet_id); 
    // console.log(query); 
    query.send(handleQueryResponse); 
    }  


function handleQueryResponse(response) { 
    if (response.isError()) { 
     // alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage() + '. Please click Previous and enter a different spreadsheet ID.'); 
     console.log(response.getMessage()); 
    }  
    return response; 
} 

runMe(); 

API reference

回答

1

不幸的是,你將無法獲得在runMe()函數的值。這是因爲它觸發的調用是異步的;它只是發送一個請求,其響應將由指定的回調函數處理,在您的案例handleQueryResponse

我只會將runMe視爲觸發器;無論您希望在該功能中包含哪些邏輯,請將注意力集中到handleQueryResponse

希望有所幫助。如果我誤解了某些內容,請隨意提供更多的上下文。

+0

感謝奧利 - 這解釋了很多:)這將是一個嚮導用戶界面,我希望在第一步驗證,但它聽起來像我需要爲此提出一個不同的用戶界面。讚賞。 – shacker