2014-01-29 2 views
0

Мой скрипт отлично работает и может возвращать данные из моей таблицы, когда я запускаю сценарий из редактора, но он терпит неудачу, когда я пытаюсь использовать cURL или Postman.GAS - GET не работает, но POST делает

I Способно выдать POST для вызова doPost(e) и добавить дополнительную строку в таблицу из заданных параметров. Я хотел бы иметь возможность отправить запрос GET для вызова метода doGet(e), который возвращает строки моей таблицы в виде JSON (я проверил, что doGet работает в редакторе).

Однако, когда я пытаюсь оформить GET с помощью CURL или Почтальон я получаю TypeError: Cannot call method "getRange" of null.

Я смущен, потому что я не называю метод getRange() в всех в моем сценарии, так что я не знаю откуда эта ошибка. Я жестко закодировал ключ электронной таблицы и имя рабочего листа в скрипте для тестирования, и я все равно получаю ту же ошибку.

Я развернул веб-приложение, чтобы оно выполнялось с моей учетной записью Google, и я разрешаю Anyone, even anonymous для доступа к скрипту. Я запустил функцию настройки для авторизации моей учетной записи в скрипте.

Это link в моей таблице.

Вот мой код:

function doGet(e) { 
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE"); 
var sheet = ss.getSheetByName("Clouds"); 

var rows = sheet.getDataRange(); 
var numRows = rows.getNumRows(); 
var values = rows.getValues(); 

var json = JSON.stringify(values); 
Logger.log(json); 

return json; 
}; 

function doPost(e) { 
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE"); 
//var sheet = ss.getSheetByName(e.parameter["sheetID"]); 
var sheet = ss.getSheetByName("Clouds"); 

//Logger.log("sheetId: " + e.parameter["sheetID"]); 
Logger.log("request: " + e); 

//check if sheet exists, if not add sheet 
if (sheet == null) { 
    Logger.log("Creating new sheet..."); 
    //inserts sheet with specified ID, updates sheet var, appends a header row and then locks it 
    ss.insertSheet(e.parameter["sheetID"]); 
    sheet = ss.getSheetByName(e.parameter["sheetID"]); 
    sheet.appendRow(["ID","Coverage","Date", "Time", "Comments", "kWhr", "mL Water"]); 
    sheet.setFrozenRows(1); 
} 
//Append the 3 inputs to the sheet 
//If statement takes care of whether the user is using the GET or POST functions, GET will have different parameter id's 

if (e == null || e.parameter["id"] == undefined){ 
Logger.log("getting data"); 
return ContentService.createTextOutput("Successful GET"); 
//doPost(e); 
} 
else { 
Logger.log("Appending row..."); 
sheet.appendRow([ 
    e.parameter["id"], 
    e.parameter["coverage"], 
    e.parameter["date"], 
    e.parameter["time"], 
    e.parameter["comments"], 
    e.parameter["kwhr"], 
    e.parameter["ml"] 
]); 
} 

//Returns a string to be displayed (If nothing is return you get a Google page saying the script worked and nothing was returned) 
return ContentService.createTextOutput("Successfully Submitted. You may close the application"); 
} 

ответ

0

Только что узнал, что я должен опубликовать код в другой версии. Теперь все работает.

Смежные вопросы