1

タイトルにあるように、POSTメソッドを使用してある種のJSONをGoogleAppScriptに送信できるかどうかを知りたいです。JSONが送信されると、Googleスクリプトによって処理されます。

今まで、私は3つの入力を持つ標準のhtmlフォームを使用して投稿リクエストを送信することができました(私はこのガイドに従いました:http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert- with-apps-script-form-postget-submit-method /)。ここで、jsonをgoogleスクリプトに送信するajax呼び出しに移動したいのですが、方法がわかりません。

次のようなajax呼び出しを使用します。

$.ajax({
  type: "POST",
  url: url,
  data: "someSortOfData",
  success: function(data){alert("ok")},
  error: function(message){alert("fail")}
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

ここで、「someSortOfData」は送信する実際のデータです(json、単純なテキスト、htmlなどで試しました)。スクリプトを実行するたびに、呼び出しは「エラー」関数に入り続けますが、その理由はわかりません。

前にも言ったように、データの送信に標準のhtmlフォームを使用すると機能するので、URLは問題ないと思います。問題は私が送信しているデータにあると思います。多分、サーバー側、グーグルスクリプトはテキストと何も違うことを期待していませんか?

スクリプト(サーバー側)は次のようになります

function doPost(e) {
  var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('active'));
  var sheet = ss.getSheetByName("DATA");
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var nextRow = sheet.getLastRow(); // get next row
  var cell = sheet.getRange('a1');
  var col = 0;
  for (i in headers){
    val = e.parameter[headers[i]]; 
    cell.offset(nextRow, col).setValue(val);
    col++;
  }

  //return sent data
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  for( p in e.parameters){
    panel.add(app.createLabel(p +" "+e.parameters[p]));
  }
  app.add(panel);
  return app;
}

私もおそらくこのコードを編集する必要がありますが、最初はサーバーに正しくjsonを送信しようとしていました。

私が間違っているのは何ですか?

4

1 に答える 1

-1

コメントで述べたように、クライアント側のクロスドメイン スクリプティングの問題のように聞こえる可能性があります。AJAX呼び出しがどこから来ているかが重要です-GASは通常、出力の生成中にエラーが発生した場合でも200を返すようです。これは「成功」であるはずです。

もう少しデバッグ情報を取得する"fail"ようにメッセージを変更することもできますが、クロスドメイン スクリプティング ブロックの場合、情報がまばらになることがあります (たとえば、"No Transport")。alert("fail:" + JSON.stringify(message))おそらくmhawkseyの修正がチケットであるか、JQuery AJAX fxnalityのJSONPモードを使用してみてください(docs、特にdataType、またはthis answerを参照)。

于 2012-11-29T23:17:26.240 に答える