Javascript 在服务器端生成文件之前,显示进度条或阻止UI
我正在对从MS SQL server数据库中提取的一些数据生成一个强制导向布局(使用d3.js)。目前,我正在使用python脚本生成json文件,然后使用python-msimplehttpserver在本地服务器上运行它 我想做的是在我的python脚本和HTML之间创建一个链接,这样当我键入webaddress时,python脚本应该在服务器端运行并生成json文件。在此期间,我需要阻止UI。生成文件时,图形应显示在屏幕上。我可以分别生成图形和json文件。需要将它们与blockui或进度条放在一起(我认为进度条太多了) 我是javascript和web开发的noob,在创建图表的过程中有点像是在学习。在这方面的任何指导都将不胜感激 谢谢 普拉蒂克 编辑: 截至目前,代码片段如下所示:Javascript 在服务器端生成文件之前,显示进度条或阻止UI,javascript,jquery,ajax,d3.js,Javascript,Jquery,Ajax,D3.js,我正在对从MS SQL server数据库中提取的一些数据生成一个强制导向布局(使用d3.js)。目前,我正在使用python脚本生成json文件,然后使用python-msimplehttpserver在本地服务器上运行它 我想做的是在我的python脚本和HTML之间创建一个链接,这样当我键入webaddress时,python脚本应该在服务器端运行并生成json文件。在此期间,我需要阻止UI。生成文件时,图形应显示在屏幕上。我可以分别生成图形和json文件。需要将它们与blockui或进度
d3.json("json_data.json", function(error, graph)
{
var nodeMap = {};
graph.nodes.forEach(function(x) { nodeMap[x.name] = x; });
graph.links = graph.links.map(
function(x)
{
return {
source: nodeMap[x.source],
target: nodeMap[x.target],
value: x.value
};
});
force
.nodes(graph.nodes)
.links(graph.links)
.start();
我将把这段代码放在ajax请求的成功部分。我希望脚本发送ajax请求一分钟,以查看服务器上是否存在json_data.json文件,并在创建文件时显示旋转的轮子(如果时间已过,则会将控制传输到请求的错误部分)
json文件简单如下所示:
nodes: {}
links: {} //without any children level of depth.
如果您使用的是jQuery,请查看以了解如何创建ajax请求。您可能希望将请求放在页面的$(document).ready()函数的开头。然后可以使用前面提到的方法,在开始ajax调用之前阻塞页面,然后在ajax调用中定义的成功和错误(或完成)回调中取消阻塞。如下所示:
$(document).ready(function() {
$('body').blockUI();
$.ajax({
url: http://www.example.com/pathYouAreListeningOn,
data: {
"dataYouNeedToSend" : "Here"
},
success: function(result, status, xhr) {
$('body').unblockUI();
// Whatever you need to do to display your graph
},
error: function(xhr,status,error) {
$('body').unblockUI();
}
});
});
需要注意的是,如果您的url请求将是您所在页面的url,则不需要包含该url,如果您没有任何需要随ajax请求发送的数据,则也可以不发送该请求。您无法拥有真正的进度条(除非您做了大量不值得的额外工作)。你可以用一个纺车或类似的东西吗?是的。这就是为什么我说进度条会有太多的工作…旋转轮子会很好。任何我可以阻止用户界面的好方法。你可能需要重新考虑你的方法。阻止UI通常不是一件好事。。这就是我对blockUI的意思。由于我从MS SQL Server数据库中提取的数据非常大(超过5万行),因此我不希望用户在代码呈现图形时单击页面上的任何其他位置。你能详细解释一下为什么这不是一件好事吗?谢谢你的快速回复。在我的例子中,success将被定义为在服务器端找到的json文件(这将是python脚本成功运行的结果)。但是我不知道如何在请求中包装这个。我让epython文件只做处理,html页面和javascript从json中提取数据并显示在浏览器上。因此,理想情况下,我们将永远存在。我想检查data.json文件是否成功或错误。我不确定将其包装在请求中是什么意思,是指响应吗?如果脚本返回某些内容,将始终调用success回调。只有当ajax调用出现问题时,才会调用错误回调。在回答这个问题时,您可能想看看json结果是如何形成的:注意python的结果如何包含成功和一条消息,您可能想做一些类似的事情。谢谢Jahorse。这正是我想要的。