$.ajax表单使用JSONP提交给Google文档:“;被解释为脚本但用MIME类型text/html传输的资源”;
$.ajax form submit to Google Docs using JSONP: "Resource interpreted as Script but transferred with MIME type text/html"
更新:问题已更改以反映JSONP的使用,并且出现了新问题,因此我更改了问题。
背景
- 我有一个表单提交,我需要将其提交到谷歌文档表单
- 不幸的是,对于给定的情况来说,这是一个硬性要求
- 我需要创建一个网页作为这个表单的更好界面(长话短说:人们将使用iPad输入信息,它需要谷歌表单默认没有的某些UI触摸)
- 我可以通过HTML表单的"操作"进行提交;但是,我需要覆盖表单提交,这样我就可以在客户端执行一些自定义编码器,通过Ajax提交表单,然后为新条目清除表单
目标
- 单击提交按钮后,通过Ajax提交表单,并根据响应的成功或失败进行操作
问题/问题
我在Chrome控制台中看到以下错误(省略了表单键);
资源被解释为脚本,但使用MIME类型text/html/传输
我该如何避免这种情况?有没有什么方法可以在不触发这个问题的情况下将这些数据提交到谷歌表单?
迄今为止的代码
HTML页面:
<form id="ss-form" name="googleform" class="pure-form pure-form-aligned">
<!-- Fields omitted for brevity -->
<input type="submit" class="pure-button pure-button-primary" id="btnSubmit" />
</form>
JavaScript:
$(document).ready(function () {
console.log("Document Ready");
disableFormSubmissionEvent();
wireUpSubmitButton();
});
disableFormSubmissionEvent = function () {
console.log("Disabling sumission Event");
$('#ss-form').submit(function () {
return false;
});
wireUpSubmitButton = function () {
console.log("Wiring up submit button");
$("#btnSubmit").click(function () {
submitForm();
});
尝试提交表单的JavaScript(省略表单键):
submitForm = function (event) {
console.log("obtaining form data");
var thedata = $('#ss-form').serialize();
console.log("Attempting Form Submission");
var submissionUrl = "https://docs.google.com/forms/d/[...]/formResponse";
$.ajaxSetup({ cache: false });
$.ajax({
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
url: submissionUrl,
data: thedata
}).success(function () {
clearForm();
showSuccessMessage();
}
)
.fail(function (jqXHR, textStatus, errorThrown) {
showFailureMessage(jqXHR, textStatus, errorThrown, submissionUrl);
});
Google文档响应返回一个html页面,因此没有json/jsonp,而且是跨域的。我的建议是在你的网站上建立一个代理,它将提交给谷歌文档并返回json
以下是一种抑制错误的方法,尽管在某些浏览器中仍然会在控制台中记录警告(但没有错误!)
这里有一个例子,我用来记录用户提供给谷歌表单的电子邮件地址:
var src = '//docs.google.com/a/MY_GOOGLE_DOCS_DOMAIN/forms/d/FORM_IDENT/formResponse?entry.INPUT_ID=' + encodeURI(emailAddress);
window.email_submit_beacon = $('<img/>', {
'src':src
});
我不能100%确定是否需要window.email_submit_beacon分配,但我认为最好强制浏览器将图像保存在内存中,这样在图像请求完成之前就不会卸载图像。
还要注意,我使用的是自定义域,对你来说,URL可能就是你发布的:https://docs.google.com/forms/d/FORM_IDENT/formResponse
如果你想知道请求何时完成,你可以看看图像何时加载(这类似于用JS进行图像预加载的方式)。
相关文章:
- 如何通过JavaScript了解当前加载页面的mime类型或内容类型
- EventSource 的响应具有非“文本/事件流”的 MIME 类型(“文本/纯文本”)
- Node js:如何获取文件签名标头而不是 mime 类型
- 如何在 Node.js 中发送文件之前设置 MIME 类型
- 我收到消息“资源解释为脚本,但使用 MIME 类型文本/html 传输”
- 资源被解释为脚本,但使用MIME类型text/plain传输
- 找不到 IE8 MIME 类型应用程序/json
- Safari-->"应用程序缓存清单的MIME类型不正确:text/plain&”;
- 我应该对 JavaScript 源映射文件使用哪种 MIME 类型
- Internet Explorer mimeType 始终为空,并且无法在此浏览器中获取支持的 MIME 类型
- 如何在一个 Http 响应中将多个 mime 类型返回到 Web 客户端
- 如何解决“资源解释为脚本但使用 MIME 类型文本/html 传输”
- 在Codeigniter中上传ajax上的奇怪MIME类型
- Javascript:如何从HTML文件输入中获取.tgz MIME类型
- FineUploader 和 Mime 类型(------WebKitFormBoundary) 附加到文件中
- 在 Tomcat 中更改 .xml.gz 的 mime 类型
- 请求的内容类型标头包含的不仅仅是 MIME 类型,为什么
- 在该应用程序上运行SortSite时,此IMG链接到图像的MIME类型错误的文件
- $.ajax表单使用JSONP提交给Google文档:“;被解释为脚本但用MIME类型text/html传输的资源”;
- 资源被解释为图像,但使用MIME类型的应用程序/八位字节流传输