Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
148
rated 0 times [  150] [ 2]  / answers: 1 / hits: 19580  / 9 Years ago, sun, june 14, 2015, 12:00:00

I am trying return an array and use it in a javascript function, but it doesn't seem to work. My Code.gs is as follows:



function doGet() {
return HtmlService.createHtmlOutputFromFile('test')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function test() {
var locations = [];
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/13q7pIeMUHll6_5xBUpBavaBqALt9fnFnOIO-Hwy_pFc/edit'),
sheet = ss.getActiveSheet(),
range = ss.getRange(D2:D4),
values = range.getValues();
for (var r=1; r<values.length; r++) {
var row = values[r];
locations.push(row[0]);
}
return locations;
}


The function in my test.html looks as follows:



function hello() {
google.script.run.test();
}


So I want to pass the array and its contents to the hello function in my test.html. How can I make this work?


More From » arrays

 Answers
134

You need a withSuccessHandler() method chained to your google.script.run:



function hello() {
google.script.run
.withSuccessHandler(injectHTML)
.test();
}

//This captures the returned string from the server side code
function injectHTML(argReturnedArray) {
//To Do - code to inject the HTML

};


Unfortunately, server side .gs code will only return a string. But there's a way to deal with that. Use:



JSON.stringify(yourArray);


Your array is named locations.



return JSON.stringify(locations);


Now you need to convert the JSON string back to an array:



function injectHTML(argReturnedArray) {
/* Put the array into the browsers window object in order to make the
* array named myReturnedArray available to all other functions.
*/
window.myReturnedArray = JSON.parse(argReturnedArray);

//To Do - code to inject the HTML
};

//Get the array in another function
function myOtherFunction() {
//Get the array from the browsers window object
var theArray = window.myReturnedArray;
var i=0, thisElement=;
for (i=0;i<theArray.length;i+=1) {
thisElement = theArray[i];
}
};

[#66214] Thursday, June 11, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
denver

Total Points: 232
Total Questions: 111
Total Answers: 103

Location: South Korea
Member since Sat, Oct 2, 2021
3 Years ago
;