25

フォームデータをGoogleスプレッドシートに投稿しようとしています。現在、フォームが検証されると、次のようになります。

if (validateForm === true) {
        $.ajax({
            type: 'post',
            url: 'https://docs.google.com/spreadsheet/ccc?key=0AlwuDjMUxwhqdGp1WU1KQ0FoUGZpbFRuUDRzRkszc3c',
            data: $("#workPLZ").serialize(),
            success: alert($("#workPLZ").serialize())
        });
    }
    else {}

成功設定を使用して、フォームデータが適切にシリアル化されていること(実際にシリアル化されていること)と成功していることを確認しました。しかし、私のグーグルスプレッドシートは更新されていません(データは通過していません)。ここではサンプルコードを使用して、doGetをdoPostに変更しました(http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit- method /)、およびgoogleスプレッドシートを公開(および誰でも編集可能)にしました。指示に従い、コードをgoogledocsにコピーしてから、setUpを2回実行しました(1回目は許可を求め、2回目は実行しても、何も起こらなかった)。誰か助けてもらえますか?とても親密な気がします。

4

3 に答える 3

37

さて、私は解決策を思いついた。クロスドメインAJAXの問題について知らされた後、私は先に進んで、http://mashe.hawksey.info/2011/10/google-spreadsheets-asで記事の作成者が使用した方法に従うことにしました。 -a-database-insert-with-apps-script-form-postget-submit-method/

Googleスプレッドシートにデータを投稿するには、最初にスプレッドシートを作成し、シート名(左下隅)をDATAに変更します。次に、スプ​​レッドシートでスクリプトエディター([ツール] ==> [スクリプトエディター])を開き、記事からスクリプトを貼り付けます。「doGet(e)」を「doPost(e)」に変更します。setUpスクリプトを2回実行します。最初に実行の許可を求める(許可する)と、2回目に実行することを選択したときに、実行したことを示すポップアップは表示されません(エディターで実行したので、上記の「setUpの実行」と表示されます)コード入力領域ですが、それだけでした)。その後、スクリプトエディタで[公開]を選択し、[サービスとして公開]を選択します。[誰でもこのサービスを呼び出すことを許可する]ラジオボタンと[匿名アクセスを許可する]チェックボックスをクリックします。URLをコピーします(重要!)、[サービスを有効にする]をクリックします。これが「難しい部分」でした。

HTMLフォームでは、送信する各要素に「name」属性が必要です(例)。この名前は、データの送信方法です。各エントリはその名前に関連付けられています。収集するフォームデータのすべての部分に名前があり、その名前がスプレッドシートの列として入力されていることを確認してください(これにより、フォームからスプレッドシートにデータがマッピングされます)。フォームの場合、投稿するメソッドとアクションを次のように「サービスとして公開」URL(保存するように指示しました)に設定します。

<form id="formID" method="post" action="URL" target="hidden_iframe">

フォームを選択してjqueryで送信できるように、フォームIDを含めました。HTMLで、上記のフォームの前に、非表示のiframeを追加します。

<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;"></iframe>

ある種のフォーム検証を設定し(必須ではありませんが、すべてのフィールドに入力しないと、スプレッドシートに不完全なデータが表示されます)、検証された場合は、jquery .submit()を呼び出します。例えば:

    if (formValidation === true){
           $("#formID").submit();
    }
    else {}

以上です。幸運を!

于 2012-04-04T16:00:38.320 に答える
13

Google Apps ScriptにJSON応答を返すことができるContentServiceが追加されたため、非表示のiframeを使用せずにajaxリクエストを行うことができます。元のソリューションの記事の作成者として、ajaxの例を含むこの手法の更新バージョンを公開しました

特に、他の新しいGoogle Apps Scriptサービスを利用しているため、この新しいバージョンへの切り替えを検討することもできます。

  • LockServiceを使用して同時書き込みアクセスを防止します。と
  • スクリプトデータを保存するために新しいPropertiesServiceに切り替えます
于 2014-07-06T09:00:37.170 に答える
3

AJAXを使用せずにGoogleスプレッドシートにデータを送信する簡単な方法を紹介します。GoogleフォームもPHPも...GoogleスプレッドシートとHTMLまたはAndroidだけです。

  1. 新しいGoogleスプレッドシートを作成します。
  2. ツール/スクリプトエディタを開く

エディターには、HTMLとCode.gsの2つのファイルが必要です。

例として:

  1. ファイル/新しいHTML名に移動しますこのfile=Index.html:

    <!DOCTYPE html>
    <html>
    <head>
    <base target="_top">
    
    <script>
    function Enviar(){
    
    var txt1=document.getElementById("txt1").value;
    var txt2=document.getElementById("txt2").value;
    var txt3=document.getElementById("txt3").value;
    google.script.run.doSomething(txt1,txt2,txt3);
    }
    </script>
    </head>
    
    <body>
    Prueba de Envio de informacion<br>
    <input type="text" value="EMAIL" name="txt1" id="txt1"><br>
    <input type="text" value="CEDULA" name="txt2" id="txt2"><br>
    <input type="text" value="NOMBRE" name="txt3" id="txt3"><BR>
    <Button name="btn1" onClick="Enviar();">Enviar</button>
    </body>
    
    </html>
    

送信するフィールドは3つあります:EMAIL、CEDULA、NOMBRE

  1. 同じScriptEditorで、de Code.gsファイルに移動し、次のように入力します。

    function doGet() {
    return HtmlService.createHtmlOutputFromFile('Index')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
    }
    
    function doSomething(s1,s2,s3){
    
    Logger.log('datos:'+s1+"  "+s2+"  "+s3);
    var enlace="https://docs.google.com/spreadsheets/d/
    1XuAXmUeGz2Ffr11R8YZNihLE_HSck9Hf_mRtFSXjWGw/edit";
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ss = SpreadsheetApp.openByUrl(enlace);
    var sheet = ss.getSheets()[0];
    sheet.appendRow([s1, s2, s3]);
    Logger.log(ss.getName());
    }
    

ここで、enlaceはSpreadSheetのURLです。

  1. アプリケーションアプリとして公開し、新しいスクリプトのURLを取得します。これで、このURLをHTMLアプリケーションまたはAndroidアプリに埋め込んで使用できます。それでおしまい。ユーザーは、このスクリプトを開くための許可を求められます
于 2016-04-03T02:08:16.143 に答える