Javascript 在服务器端生成文件之前,显示进度条或阻止UI

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或进度

我正在对从MS SQL server数据库中提取的一些数据生成一个强制导向布局(使用d3.js)。目前,我正在使用python脚本生成json文件,然后使用python-msimplehttpserver在本地服务器上运行它

我想做的是在我的python脚本和HTML之间创建一个链接,这样当我键入webaddress时,python脚本应该在服务器端运行并生成json文件。在此期间,我需要阻止UI。生成文件时,图形应显示在屏幕上。我可以分别生成图形和json文件。需要将它们与blockui或进度条放在一起(我认为进度条太多了)

我是javascript和web开发的noob,在创建图表的过程中有点像是在学习。在这方面的任何指导都将不胜感激

谢谢

普拉蒂克

编辑:

截至目前,代码片段如下所示:

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。这正是我想要的。