Javascript EVE Online的谷歌应用程序脚本中的HTML错误
我目前正在为EVE Online开发一个娱乐性的Google应用程序脚本(GAS),当我获得服务器端功能与客户端功能对话时,我遇到了麻烦。 HTML:Javascript EVE Online的谷歌应用程序脚本中的HTML错误,javascript,html,google-apps-script,Javascript,Html,Google Apps Script,我目前正在为EVE Online开发一个娱乐性的Google应用程序脚本(GAS),当我获得服务器端功能与客户端功能对话时,我遇到了麻烦。 HTML: 类型名称类型ID 函数onSuccess(输出){ document.getElementById(输出[0])。innerHTML=output[1]; }; 气体: 函数doGet(){ 返回HtmlService.createTemplateFromFile('Index').evaluate().setTitle('UMX Web
类型名称类型ID
函数onSuccess(输出){
document.getElementById(输出[0])。innerHTML=output[1];
};
气体:
函数doGet(){
返回HtmlService.createTemplateFromFile('Index').evaluate().setTitle('UMX Web App');
};
函数包括(文件名){
返回HtmlService.createHtmlOutFromFile(文件名).getContent();
};
功能短名单(表格、表格){
var arr=转置(htmlotarray(table));
var项目=form.mat;
如果(isNaN(项目)){
var url='1〕https://www.fuzzwork.co.uk/api/typeid2.php?format=xml&typename=“+item.toString();
}否则{
var url='1〕https://api.eveonline.com/eve/TypeName.xml.aspx?ids=“+item.toString();
};
var xml=UrlFetchApp.fetch(url.getContentText();
var document=XmlService.parse(xml);
var name=document.getRootElement().getChild('result').getChild('rowset').getChild('row').getAttribute('typeName').getValue();
if(arr[0].indexOf(name)=-1&&name!=“未知类型”&&name!=“坏项”){
arr[0]。推送(名称);
arr[1].push(document.getRootElement().getChild('result').getChild('rowset').getChild('row').getAttribute('typeID').getValue());
};
var-str=arraytothtml(转置(arr));
返回['spn1',str]
};
函数arrayToHTML(arr){
var i=0;
var j=0;
var-str='';
而(i
问题似乎出现在提交按钮上,因为其他一切都正常工作。我一直在寻找一个解决办法,但提交按钮是我能得到的唯一入口点,它不会接受多个变量
问题似乎出现在提交按钮上,因为其他一切都正常工作。我一直在寻找一个解决办法,但提交按钮是我能得到的唯一入口点,它不会接受多个变量
让我们专注于此,忽略所有不相关的代码。基本问题:如何从表单到服务器端GAS函数获取多个输入
本例将演示表单对象与服务器的通信,方法是抛出一个包含所有接收参数的错误。客户端上的errorHandler
将alert
显示收到的错误消息
Index.html
运行此Web应用程序,以下是您的结果:
名为input
的两个元素,mat
和mat2
通过this.parent
参数传递给服务器函数shortlist()
。由于在其clickHandler中调用this.parent
的按钮包含在frm1
表单中,因此该表单的所有输入元素都包括在内,并且可以在服务器端作为shortlist()
的输入
参数的命名属性引用。(不作为数组元素。)
这样做的结果是可以修改shortlist()
函数:
function shortlist(input) {
var item = input.mat;
if ( isNaN(item) ) {
var url = 'https://www.fuzzwork.co.uk/api/typeid2.php?format=xml&typename=' + item;
} else {
var url = 'https://api.eveonline.com/eve/TypeName.xml.aspx?ids=' + item.toString();
};
...
你看到了什么结果?你期待什么?为什么您认为问题出在提交按钮上?请添加更多信息。一个奇怪的现象是,您使用两个参数(
this.parentNode
和一个字符串)从客户端调用shortlist
,但服务器端将单个input
参数视为数组。很抱歉,我希望结果是“spn1”中的表来添加新项,但如果它是错误项或已经在表中,则不这样做。我认为除了电子表格之外,GAS web应用程序中不可能有一个数据库,如果两个人同时使用它,这会导致问题,所以我希望我可以通过删除此表的innerHTML并附加它来获得它。我得到的结果是没有响应,但让我与故障处理程序检查一下。。。什么也没有。它甚至没有给我一个错误。另外,我在原始代码中犯了一个错误,没有按足够的“撤消”。修复。检查客户端javascript控制台-将有一个关于传递到服务器的参数的错误。当表单
是一个参数时,它必须是唯一的参数。你不能像这样通过桌子。不过,您可以让clickHandler使用表单字段+表构建一个对象。更好的是,您可以将脚本放入电子表格,并将其用作数据库。或者您可以使用托管数据库。。。
function doGet() {
return HtmlService.createTemplateFromFile('Index').evaluate().setTitle('UMX Web App');
};
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
};
function shortlist(form,table) {
var arr = transpose(htmlToArray(table));
var item = form.mat;
if ( isNaN(item) ) {
var url = 'https://www.fuzzwork.co.uk/api/typeid2.php?format=xml&typename=' + item.toString();
} else {
var url = 'https://api.eveonline.com/eve/TypeName.xml.aspx?ids=' + item.toString();
};
var xml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(xml);
var name = document.getRootElement().getChild('result').getChild('rowset').getChild('row').getAttribute('typeName').getValue();
if ( arr[0].indexOf(name) == -1 && name != 'Unknown Type' && name != 'bad item' ) {
arr[0].push(name);
arr[1].push(document.getRootElement().getChild('result').getChild('rowset').getChild('row').getAttribute('typeID').getValue());
};
var str = arrayToHTML(transpose(arr));
return ['spn1',str]
};
function arrayToHTML(arr) {
var i = 0;
var j = 0;
var str = '<table>';
while ( i < arr.length ) {
str = str + '<tr>';
while ( j < arr[i].length ) {
str = str + '<td>' + arr[i][j] + '</td>';
j += 1
};
str = str + '</tr>';
j = 0;
i += 1
};
str = str + '</table>';
return str
};
function htmlToArray(str) {
var arr1 = str.replace(/<tr>/g,'</tr>').split('</tr>');
var arr2 = [];
var i = 1;
var j = 1;
var x = [];
while ( i < arr1.length ) {
arr2.push([]);
x = arr1[i].replace(/<td>/g,'</td>').split('</td>');
while ( j < x.length ) {
arr2[arr2.length - 1].push(x[j]);
j += 2
};
j = 1;
i += 2
};
return arr2
};
function transpose(input) {
var output = [];
var i = 0;
var j = 0;
while ( i < input[0].length ) {
output.push([]);
while ( j < input.length ) {
output[i].push(input[j][i]);
j += 1
};
j = 0;
i += 1
};
return output
};
function direct(input) {
return input
}
<form id="frm1" name = "mat_add">
<input width="1000" type="text" name="mat" placeholder="Enter Item Here" /><br />
<input width="1000" type="text" name="mat2" placeholder="Enter Quantity Here" /><br />
<input type="button" value="Submit" name="mat_sub" onclick="google.script.run
.withSuccessHandler(onSuccess)
.withFailureHandler(onFailure)
.shortlist(this.parentNode)" />
</form>
<script>
function onSuccess(output) {
document.getElementById(output[0]).innerHTML = output[1];
};
function onFailure(error) {
alert( error.message );
}
</script>
function doGet() {
return HtmlService.createTemplateFromFile('Index').evaluate().setTitle('UMX Web App');
};
function shortlist(input) {
reportErr(JSON.stringify(input,null,2))
}
function reportErr(msg) {
throw new Error( msg );
}
function shortlist(input) {
var item = input.mat;
if ( isNaN(item) ) {
var url = 'https://www.fuzzwork.co.uk/api/typeid2.php?format=xml&typename=' + item;
} else {
var url = 'https://api.eveonline.com/eve/TypeName.xml.aspx?ids=' + item.toString();
};
...