iT邦幫忙

0

google apps script 無法接收到ajax的post

  • 分享至 

  • xImage

我想做一個可以將資料寫入google試算表的網頁,因為我完全沒接觸過程式設計這方面東西,所以都是照著網路上教學做,一開始我是用heml的form表單來傳送資料給GAS的doPost,但是form傳送後都會跳轉到另一個頁面,所以我想改用$.ajax來傳送post給GAS,但是試了好幾次ajax都只會執行到error,沒辦法傳送post給我的GAS...程式碼如下,還請高手指點。

GAS(我是看試算表內的A1有沒有填上數字來判斷有沒有成功):

function doPost(e){
   var ss = SpreadsheetApp.getActiveSpreadsheet(),
   sheet1 = ss.getSheetByName('工作表12');
   sheet1.getRange('A1').setValue("12344564");
}

form的版本:

<html>
<head>
<title>...</title>
</head>
<body>
 <form  action="https://script.google.com/macros/s/AKfycbyXQuFLENXj8HtElwDdubrYmERKwTsn/exec"
 method="post"><br />
<input type="submit" value="提交"/>
</form>
</body>
</html>

ajax:

ml>
<head>
<title>...</title>
</head>
<body>
<form  action="https://script.google.com/macros/s/AKfycbyXQuFLENXj8HtElwDdubrYmERKwTsn/exec"
 method="post" id="test"><br />
<button type="button" id="submitExample">提交
</button>
</form>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
var data_url ="https://script.google.com/macros/s/AKfycbyXQuFLENXj8HtElwDdubrYmERKwTsn3HCNbochxfo/exec";
$(document).ready(function(){
  $("#submitExample").click(function(){
    $.ajax({
      url: data_url,
      type: "POST",
      success: function(){alert("新增資料成功!")},
      error: function(){alert("失敗!")}
    });
  });
});
</script>
</body>
</html>
咖咖拉 iT邦好手 1 級 ‧ 2020-07-14 17:04:35 檢舉
你權限沒開完整阿

你手機安卓嗎? 看一下是不是有出現甚麼
abcbox360 iT邦新手 5 級 ‧ 2020-07-15 08:49:03 檢舉
我是用電腦!
權限應該都開了吧?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
咖咖拉
iT邦好手 1 級 ‧ 2020-07-14 11:45:01
最佳解答
function doGet(e) {

  var params = e.parameter; 
  var name = params.name;

  var SpreadSheet = SpreadsheetApp.openById("AKfycbyXQuFLENXj8HtElwDdubrYmERKwTsn3HCNbochxfo");//請輸入自己的sheet id
  var Sheet = SpreadSheet.getSheets()[0];
  var LastRow = Sheet.getLastRow();

  Sheet.getRange(LastRow+1, 1).setValue(name);
  
  return ContentService.createTextOutput("成功");
}
  $.ajax({
    url: "https://script.google.com/macros/s/AKfycbyXQuFLENXj8HtElwDdubrYmERKwTsn3HCNbochxfo/exec",
    
    
    data: {
        "name": "123456",
    },
    success: function(response) {

      alert("成功");
      console.log(response);

    },
    error: function(){alert("失敗!")}
  });

可以試看看這樣寫

google試算表要發佈到網路上

指令編輯器也需要發布網頁應用程式並給予權限

用FORM成不成功都會進入
https://script.google.com/macros/s/AKfycbyXQuFLENXj8HtElwDdubrYmERKwTsn3HCNbochxfo/exec

你的程式就會觸發運作,沒FORM直接手動進去是一樣的

abcbox360 iT邦新手 5 級 ‧ 2020-07-15 09:49:34 檢舉

我另外開了一個GAS,裡面照你打得,網址在這:https://script.google.com/macros/s/AKfycbxyM7JN_IvdHYj8a5IL6ePuhJrd0kmABPEgwcVPs4I/exec
單獨打開會顯示成功沒錯,但是用ajax一樣沒辦法傳data進去,只會跳出失敗!...

測試的試算表在這:https://docs.google.com/spreadsheets/d/1Dz3a1sHPLnE0c7-I8rNolFMijdIN91k9Cse8R6yHXTo/edit#gid=0

咖咖拉 iT邦好手 1 級 ‧ 2020-07-15 10:28:50 檢舉

API上有CORS 代表你還沒給完整權限
我記得之前我是電腦跟手機都授權才通的

abcbox360 iT邦新手 5 級 ‧ 2020-07-15 11:54:30 檢舉

結果真的是權限的問題,真是太感謝你了!!

我要發表回答

立即登入回答