我正在尝试创建一个解析页面的书签,并通过我定义的表单将结果发送到googledocs电子表格。
脚本的相关内容是:
var form = document.createElement("form");
form.action = "http://spreadsheets.google.com/formResponse?formkey=Fd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA&ifq";
form.method = "POST";
form.id="ss-form";
form.innerHTML = ["<input id='entry_0' name = 'entry.0.single' value = '" + orderDate + "'/>", "<input name = 'entry.2.single' value = '" + email + "'/>", "<input name = 'entry.3.single' value = '" + customerID + "'/>", ].join("");
form.submit();
alert(form.innerHTML);
//返回:
没有任何东西通过书签保存到表单 - 在我的书签的代码中捕获谷歌的响应的任何方式? (fwiw,我通过jQueryify注入了jQuery)
编辑:
Firebug的Net面板没有听到由bookmarklet触发的任何活动 - 我如何通过goolgle的 viewform 方法而不是 formresponse 来处理此事。
我要提交的表单位于:
http://spreadsheets.google.com/viewform?hl=en&formkey=dFd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA
如何将脚本值注入该表单然后再次提交...通过在正在解析的页面上触发的书签中的脚本?
答案 0 :(得分:7)
如果你已经在使用jquery,请尝试通过ajax($ .ajax)提交表单。您可以设置一个成功功能,当谷歌发回他们的回复时将会调用该功能。
或者你应该能够使用firebug查看google发回的响应。
具体来说,我认为你可以尝试以下内容:
$.ajax({
url: "http://spreadsheets.google.com/formResponse",
data: { formkey: "Fd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA&ifq", "entry.0.single": orderDate, "entry.2.single": email, "entry.3.single": customerID },
type: "POST",
dataType: "xml",
success: function(data, textStatus, XMLHttpRequest) {
console.log("success");
console.log(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error");
console.log(textStatus);
},
})
答案 1 :(得分:4)
我刚刚做了这样的事情。这是我的过程的细分。
我需要保留不同网页的引用列表,并为每个引号添加一些信息。
我的书签将动态生成一个谷歌表单(我刚查看了我已经创建的真实谷歌表单的来源),它将自动填写当前网址,网页标题和当前选中的文字,表格将被提交。
由于我需要手动添加信息,因此我故意不包含至少一个必填字段,因此我收到了带有错误消息的google表单(但是已经填写了url,title&amp; quote)。现在我可以手动添加我需要的所有其他信息并提交表单。
如果书签填充了所有必填字段,您只会收到Google表单成功回复“谢谢!您的回复已被记录。”
我使用以下网站生成使用jQuery的书签: http://benalman.com/code/test/jquery-run-code-bookmarklet/ (我正在使用jQuery来从网页上删除其他信息和内容)
为了能够正确使用该网站,您必须逃避单行 html(您可以使用此escape tool)
所需的步骤是:
所以在我的情况下:
1。我创建了一个表单,其中包含一个用于保存网址的文本字段,另一个用于保存网页标题的文本字段,一个用于保存引号的段落文本(所选文本) )。表单还包括我手动填写的一些其他必填字段。
2. 我准备了以下html:
<form method="POST" action="https://spreadsheets.google.com/spreadsheet/formResponse?formkey=XYZXYZXYZXYZXYZXYZXYZ&ifq"> <input type="text" name="entry.0.single" value="" id="entry_0" /> <input type="text" name="entry.3.single" value="" id="entry_3" /> <textarea name="entry.2.single" id="entry_2"></textarea> <input type="submit" name="submit" value="submit" /> </form>
(entry_0 - url,entry_3 - 页面标题,entry_2 - 引用)
3。将其放入一行并将其转出。我使用了以下脚本:
frm = $(unescape('%3Cform%20action%3D%22https%3A//spreadsheets.google.com/spreadsheet/formResponse%3Fformkey%3DXYZXYZXYZXYZXYZXYZXYZ%26amp%3Bifq%22%20method%3D%22POST%22%3E%0A%3Cinput%20type%3D%22text%22%20name%3D%22entry.0.single%22%20value%3D%22%22%20id%3D%22entry_0%22%20/%3E%0A%3Cinput%20type%3D%22text%22%20name%3D%22entry.3.single%22%20value%3D%22%22%20id%3D%22entry_3%22%20/%3E%0A%3Ctextarea%20name%3D%22entry.2.single%22%20id%3D%22entry_2%22%3E%3C/textarea%3E%0A%3Cinput%20type%3D%22submit%22%20name%3D%22submit%22%20value%3D%22submit%22%20/%3E%0A%3C/form%3E'));
$(frm).children('#entry_0').attr('value',location.href);
$(frm).children('#entry_3').attr('value',$('title')[0].innerHTML);
$(frm).children('#entry_2').html(window.getSelection().toString());
$(frm).children('input[type=submit]').click()
此方法已使用chrome进行测试。 祝你好运!
答案 2 :(得分:4)
对于将来的任何人,请确保您发布的网址最后有&amp; ifq,我发现这很容易解决我的大多数问题,并返回405。
答案 3 :(得分:2)
截至今天,我无法得到正确的工作答案。我相信谷歌改变了一些事情。
我可以通过对https://docs.google.com/forms/d/<form_id>/formResponse
表单数据为entry.645136839=<somevalue>
,其中大号是从表单字段中获取的。
答案 4 :(得分:1)
我没有完整的答案,但我能够使用Curl:
使其工作curl http://spreadsheets.google.com/formResponse?formkey=dFpVLTVFY2t5dWdoNTZpNERwWDRxX2c6MQ&ifq --data entry.0.single=eric --data entry.1.single=pugh
此外,我可以通过Ajax使用原型工作,但仅限于Safari。
我也得到了Firefox中不允许的相同405方法。这是我的剧本:
function vote_for_synonym(word1, word2){
word1 = encodeURIComponent(word1);
word2 = encodeURIComponent(word2);
$req = new Ajax.Request("http://spreadsheets.google.com/formResponse?formkey=dFpVLTVFY2t5dWdoNTZpNERwWDRxX2c6MQ", {
method: 'post',
contentType: 'application/x-www-form-urlencoded',
onCreate: function(){
Element.show('systemWorking');
},
onSuccess: function() {
Element.show('thanks');
Element.hide('systemWorking')
},
onFailure: function() {
Element.show('error');
}
});
}
另外,我的onFailure永远不会被调用,只是onSuccess。
答案 5 :(得分:0)
我以为我有一些花絮要加上这个,但结果却没有解决问题。
虽然我得到了相同的'405 Method not allowed'错误...
答案 6 :(得分:0)
从您的示例代码中 - 我更改了一些内容 - 首先是表单提交结束点/ no&amp; ifq needed。谷歌可能已经更新了。查看表单来源并使用表单操作URL。其次&amp;严格来说,您的表单输入类型不包含ID(第一个除外)。有了这些东西 - 表格成功发布。
<html>
<body>
<script type="text/javascript">
var form = document.createElement("form");
form.action = "https://docs.google.com/a/yourdomain.com/forms/d/XXXXXXXXXXXXXXXXXXXX/formResponse";
form.method = "POST";
form.id="ss-form";
var repo = "https://github.com/fredericcormier/WesternMusicElements";
var branch = "master";
var email = "";
form.innerHTML = ["<input id='entry_639106242' name = 'entry.639106242' value = '" + repo + "'/>","<input id='entry_1546762025' name = 'entry.1546762025' value = '" + branch + "'/>","<input id='entry_1509161732' name = 'entry.1509161732' value = '" + email + "'/>", ].join("");
form.submit();
alert(form.innerHTML);
</script>
</body>
</html>