Доступ к статусу ответа в Google Visualization API - PullRequest
1 голос
/ 08 ноября 2011

В приведенном ниже фиктивном коде, взятом в общем из примеров API Google, есть три функции - две, которые «требуются» для API, и одна RunMe (), которая запускает его. Если запрос электронной таблицы недопустим, я могу получить доступ к сообщению об ошибке, которое он возвращает, из функции handleQueryResponse (). Но для моих целей мне нужно иметь возможность проверить наличие response.isError () из функции runMe (). Это кажется простым, но я не могу получить этот ответный объект извне handleQueryResponse (). Это может быть связано с моим статусом новичка в JavaScript или из-за того, что API делает что-то странное.

Мне также кажется странным, что раскомментирует console.log (query); в функции getTableMeta () создает объект «Er», который выглядит как прототип, а не как представление фактического запроса.

Спасибо за предложения.

Приведенный ниже идентификатор электронной таблицы недействителен с буквой "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

1 Ответ

1 голос
/ 08 ноября 2011

К сожалению, вы не сможете получить значение в функции runMe(). Это потому, что вызываемый им вызов является асинхронным; он просто отправляет запрос, ответ которого будет обработан указанной функцией обратного вызова, в вашем случае handleQueryResponse.

Я бы посмотрел на runMe просто как на триггер; любую логику, которую вы хотели бы включить в эту функцию, вместо этого сосредоточьтесь на том, чтобы включить ее в handleQueryResponse.

Надеюсь, это поможет. Не стесняйтесь предоставлять больше контекста, если я что-то неверно истолковал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...