iT邦幫忙

0

google apps script 跨網域

嗨大家,感覺這裡對使用google apps script(gas)的使用很少,我想要將我的一個頁面連接我的google sheet,所以我開始使用gas,在我的第一個版本中我要測試寫入,結果也很正確,但在發佈了第二個版本後,開始出現跨網域的問題,可是我完全沒有改到權限之類的...

請問大家有這樣的問題嗎?我也有試著用網路的解法將url最後加入callback=?但是沒有用,還是我有什麼地方沒有設定到嗎?

gs

function doGet(e) {
  //接帶入值 轉為變數    - 可根據需求修改
  var params = e.parameter;
  switch (params.method) {
    case 'write':
      return 929;
      write(params);
      break;
    case 'check':
      check(params);
    default:
      break;
  }

}

function check(params) {
var SpreadSheet = SpreadsheetApp.openById("myid");
  //取得 第一個表單
  var Sheet = SpreadSheet.getSheets()[0];
  var limit = Sheet.getLastRow();
  var matchList = Sheet.getRange("A2:A").getValues();
  var keyword = 'perster';

  for (var i = 0; i < limit; i++) {
    if (matchList[i] == "perter") return ContentService.createTextOutput(i+3);
  }
  return ContentService.createTextOutput(false);
}


function write(params) {

  var name = params.name;
  var phone = params.phone;
  var time = params.time;
  var order = params.order;
  var price = params.price;
  //這是選擇這個google excel
  var SpreadSheet = SpreadsheetApp.openById("myid");
  //取得 第一個表單
  var Sheet = SpreadSheet.getSheets()[0];

  var LastRow = Sheet.getLastRow();


  // 這邊是處理訂單編號 - 我先選取 有資料最後一行 的 第6欄
  var range = Sheet.getRange(LastRow, 6);
  // 創立訂單編號  (最後一行的第六欄 +1)
  var orderNum = parseFloat(range.getValues() || 0) + 1;
  //若最後一行是第1行 需要轉為訂單編號1
  if (LastRow == 1) {
    orderNum = 1;
  }

  //開始寫入資料 同樣是 getRange 選擇 (行,欄) setValue 帶入值name phone time order price values進來
  Sheet.getRange(LastRow + 1, 1).setValue(name);
  Sheet.getRange(LastRow + 1, 2).setValue(phone);
  Sheet.getRange(LastRow + 1, 3).setValue(time);
  Sheet.getRange(LastRow + 1, 4).setValue(order);
  Sheet.getRange(LastRow + 1, 5).setValue(price);
  Sheet.getRange(LastRow + 1, 6).setValue(orderNum);

  //寫入結束後傳回true
  return ContentService.createTextOutput(true);

}

js

$.ajax({
  type: "get",
  url: "https://script.google.com/macros/s/my_id/exec",
  data: { keyword: 'perster', method: 'check' },
  dataType: "JSON",
  success: function (response) {
    console.log('check key word', response);
  }
});

錯誤

Failed to load https://script.google.com/macros/s/myidg58/exec?method=write&name=test1&phone=phone%20number%201&time=Tue%20Jul%2010%202018%2020%3A58%3A32%20GMT%2B1000%20(%E6%BE%B3%E6%B4%B2%E6%9D%B1%E9%83%A8%E6%A8%99%E6%BA%96%E6%99%82%E9%96%93)&order=order&price=price: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'my domain' is therefore not allowed access.

看更多先前的討論...收起先前的討論...
Homura iT邦新手 3 級 ‧ 2018-07-10 19:30:46 檢舉
把你的程式碼和錯誤和設定貼出來吧.....
Rach iT邦新手 5 級 ‧ 2018-07-10 20:48:50 檢舉
補上囉,設定就是任何人,甚至是匿名使用者
Homura iT邦新手 3 級 ‧ 2018-07-11 14:17:03 檢舉
callback=?應該算是jsonp
算是一種解決方法
但是只能用Get方式
jsonp可以參考這篇看看
https://blog.johnsonlu.org/javascript%E9%80%8F%E9%81%8Ejsonp%E5%AE%8C%E6%88%90%E8%B7%A8%E7%AB%99%E8%AB%8B%E6%B1%82/
Rach iT邦新手 5 級 ‧ 2018-07-17 06:43:50 檢舉
嗨h大,想必你應該沒有解決過google apps script的這種問題或者用過吧ˊ_>ˋ

尚未有邦友回答

立即登入回答