所以我有我的服务器端代码,它执行多个bigquery查询并将结果排列在一个表中,这个服务器端代码由来自客户端的ajax调用调用。 我希望能够将表/ div从我的服务器端代码发送到客户端并在那里进行渲染。那可能吗?
我不希望能够通过首先通过调用获取JSON结果来在客户端上创建表,因为我不知道哪个查询将首先运行并且所有结果都不同。 (对于每个查询,多个ajax调用也是不可能的)
服务器代码(app.js)
function printResult(rows, queryNumber) {
console.log('Query No. '+queryNumber+' Results:____');
var keys = [];
if (queryNumber == 1) {
var table = document.createElement('table');
var td = [];
var tr = document.createElement('tr');
for (var i = 0; i < rows[0].length; i++) {
var tn1 = document.createTextNode(rows[i].Content_title);
var tn2 = document.createTextNode(rows[i].Audience_Size);
td[i] = document.createElement('td');
td[i].appendChild(tn1);
td[i + 1] = document.createElement('td').appendChild(tn2);
tr.appendChild(td[i]);
tr.appendChild(td[i + 1]);
table.appendChild(tr);
res.send(table);
}
}
}
调用Ajax
$.ajax({
url: 'http://localhost:3000/example',
type: 'POST',
data: {showname: show, counter: uniquesOverallShowsCounter},
dataType: 'text',
contentType: 'application/x-www-form-urlencoded',
success: function (data) {
document.getElementById('outputTables').appendChild(data);
},
error: function() {
console.log("error");
}
});
答案 0 :(得分:1)
是的,您可以,但正如您在评论中指出的那样,返回的数据存在问题。
无法执行&#39; appendChild&#39; on&#39; Node&#39;:参数1不属于&#39; Node&#39;。
当您尝试使用JavaScript附加子节点时,抛出此错误,该JavaScript不是documentElement(即document.createElement('div')
)。由于您已经在使用jQuery,因此您可以轻松更改代码。
在AJAX调用的成功函数中,更改
document.getElementById('outputTables').appendChild(data);
到
$('#outputTables').append(data);
如果您希望能够从一个页面执行多个AJAX调用并每次更改表格(例如将旧表格替换为新表格),则应使用html(data)
而不是append(data)
答案 1 :(得分:-1)
因此,您可以根据查询的查询在响应json中再增加一个参数,例如&#34; queryProcessed&#34;?
在客户端添加额外的检查,并根据&#34; queryProcessed&#34;
进行标记。