从Appscript将数据写入Google电子表格

时间:2019-08-29 19:37:31

标签: google-apps-script google-sheets try-catch httprequest google-apps-script-web-application

这是我的APP脚本代码,通过该代码,我试图将一行添加到工作表中。它会写入数据,但总是返回err,从而触发.fail()函数是JavaScript:

   function doGet(e) {
    try {
        var ss = SpreadsheetApp.getActiveSpreadsheet();;
        var sheet = ss.getSheets()[0];
        var name = e.parameter.name;
        var address = e.parameter.address;
        var phone = e.parameter.phone;
        var email = e.parameter.email;
        var city = e.parameter.city;
        var quantity = e.parameter.quantity;
        var productTitleFinal = e.parameter.productTitleFinal;
        var productPriceFinal = e.parameter.productPriceFinal;
        var fullDate = e.parameter.fullDate;
        var comment = e.parameter.comment;
        var url = e.parameter.url;
        var rowData = sheet.appendRow([fullDate, name, email, phone, address, city, productPriceFinal, comment, productTitleFinal, quantity, url]);
        var result = "Insertion successful";
        return result
    }
    catch (err) {
        return err
    }
}

这是JavaScript代码,可从中发送写入数据的请求

var script_url = "https://script.google.com/macros/s/AKfycbx5_btANVIwai5PJ1CT_VHocfcbIhy-_vViGSg6vzDfE_4hOFg4/exec";

  var url = script_url+"?fullDate="+fullDate+"&name="+name+"&email="+email+"&phone="+phone+"&city="+city+"&address="+address+"&comment="+comment+"&quantity="+quantity+"&productTitleFinal="+productTitleFinal+"&productPriceFinal="+productPriceFinal+"&comment="+comment+"&url="+url;

    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp",
    })
    .done(function(res){
        console.log(res)
    })
    .fail(function(e){
        console.log(e)
    })
    .always(function(e){
        console.log(e)

  });

此代码可能有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为您遇到此问题的原因是doGet()始终不会返回状态200。为避免此问题,如何进行以下修改?

修改后的脚本:

请按如下所示修改脚本。

对于Google Apps脚本:

从:
return result
至:
return ContentService.createTextOutput(result);  // Modified

对于Javascript:

从:
var request = jQuery.ajax({
  crossDomain: true,
  url: url ,
  method: "GET",
  dataType: "jsonp",
})
至:
var request = jQuery.ajax({
  crossDomain: true,  // Also this might not be required.
  url: url ,
  method: "GET",
  // dataType: "jsonp",  // Modified
})

注意:

  • 修改Google Apps脚本后,请重新部署Web Apps作为新版本。这样,最新的脚本就会反映到Web应用程序中。请注意这一点。
  • return err的情况下,不会返回错误消息。因此,如果您想返回错误消息,请修改为ContentService.createTextOutput(err)。但是在这种情况下,将返回状态码200。因此,如果要检索错误消息作为错误,则需要在done(function(res){})函数中准备脚本。因为在Google Apps脚本的Web Apps中,无法使用自定义状态代码。

参考:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。