我有一个非常基本的HTML <form>
,在操作中调用Google Apps脚本网址,如下所示:https://script.google.com/macros/s/..../exec
。 App脚本将内容写入Google电子表格。我想在用户执行后将用户重定向回特定页面,这是我用jQuery做的,但是我收到了这个错误:
XMLHttpRequest无法加载https://script.google.com/macros/s/AKfycbwg0ASXLu-2awVG_F02o5S1u1pUyrYNHaAQvxzrObFj-47vFE8/exec 否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上 起源&#39; https://gtech-pubu.googlegoro.com&#39;因此不允许访问。
以下是整个表单和jQuery。有人告诉我我失踪的是什么吗?
< script type = 'text/javascript' >
$("#courses").submit(function(event) {
event.preventDefault();
var $form = $(this),
url = $form.attr('action');
var posting = $.post(url, {
name: $('#name').val(),
product: $('#product').val(),
clearness: $('#clearness').val(),
rated: $('#rated').val(),
helpful: $('#helpful').val()
});
posting.done(function(data) {
alert('success');
});
}); < /script>
<form action="https://script.google.com/macros/s/AKfycbwg0ASXLu-2awVG_F02o5S1u1pUyrYNHaAQvxzrObFj-47vFE8/exec" method="post" id="courses">
<h4>Ad Exchange Sell-Side Fundamentals Content Survey</h4>
<fieldset>
<legend><span class="number">1</span> Module Info</legend>
<input type="hidden" name="name" value="TEST Sell-Side Fundamentals">
<input type="hidden" name="product" value="TEST">
<label>Select which module you wish to rate:</label>
<select id="courses" name="clearness">
<option value="extremely_clear">5: Extremely clear</option>
<option value="moderately_clear">4: Moderately clear</option>
<option value="clear_nor_unclear">3: Neither clear, nor unclear</option>
<option value="moderately_unclear">2: Moderately unclear</option>
<option value="extremely_unclear">1: Extremely unclear</option>
</select>
<label>Please rate the clarity of the content:</label>
<select id="courses" name="rated">
<option value="module1">Module 1</option>
<option value="module2">Module 2</option>
<option value="module3">Module 3</option>
<option value="module4">Module 4</option>
<option value="module5">Module 5</option>
<option value="module6">Module 6</option>
<option value="module7">Module 7</option>
<option value="mobule8" selected>Module 8</option>
<option value="module9">Module 9</option>
</select>
</fieldset>
<fieldset>
<legend><span class="number">2</span> Additional Info</legend>
<label>Was this module helpful?</label>
<select name="helpful" id="courses">
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
</fieldset>
<input type="submit" value="Apply" />
</form>
</div>
是否需要配置以允许跨域的Apps脚本?
答案 0 :(得分:0)
根据文档,您必须使用JSONP从XMLHTTPRequest中调用脚本...
https://developers.google.com/apps-script/guides/content#serving_jsonp_in_web_pages
尝试将JSONP作为$ .post
的最后一个参数传递var posting = $.post( url, {
name: $('#name').val(),
product: $('#product').val(),
clearness: $('#clearness').val(),
rated: $('#rated').val(),
helpful: $('#helpful').val()
}, 'jsonp' );
另外,我不知道你的脚本是什么样的,但你可能需要添加MIME类型......
.setMimeType(ContentService.MimeType.JAVASCRIPT)
就像文档中的例子一样......
return ContentService.createTextOutput(
request.parameters.prefix + '(' + JSON.stringify(result) + ')')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
注意:另外,如果您在文档中错过了它...
警告:在脚本中使用此JSONP技术时要非常小心。因为任何人都可以在他们的网页中嵌入脚本标记,所以当您访问恶意网站时可能会被欺骗执行脚本,然后可以捕获返回的数据。最佳做法是确保JSONP脚本是只读的,并且只返回非敏感信息。