GASでJSONPを返す
GASでJSONPを返す方法を調べたのでここにメモします。
方法
以下のようにします。これはGETリクエストに対して適当なデータをJSONP形式で返すメソッドです。
function doGet() {
var data = {};//返したいデータをこの変数に格納してください
var content = {
output: e.parameter.callback + '(' + JSON.stringify(data) + ');',
mimeType: ContentService.MimeType.JAVASCRIPT
};
return ContentService.createTextOutput(content.output).setMimeType(content.mimeType);
}
ポイントは以下の2点です
createTextOutputに渡すテキストを、’<e.parameter.callbackにセットされた文字列>(<シリアライズされたオブジェクト>);‘という形式にする
- JSONPの形式に対応させるためです
setMimeTypeにわたすMimeTypeをContentService.MimeType.JAVASCRIPTとする
- JSONPの形式に対応させるためです
まとめ
GASでJSONPを扱うことができるようになりました。これでCORSを気にすること無く、外部からのリクエストに対してデータを返すことが出来ます。ただし、外部からGASに対してデータを渡す場合にはCORSを何とかする方法はありません。さすがのGASもそこまで融通は利かないようです。
参考
- [GAS]送信結果をJSONPで返す
- ほぼこのページと同等の内容ですが、使用しているソースコードに間違いがありました
- ✕ ContentService.MimeType.JavaScript
- ◯ ContentService.MimeType.JAVASCRIPT
- ほぼこのページと同等の内容ですが、使用しているソースコードに間違いがありました