1

我有一个需要很长时间才能运行的 Javascript 函数。我想显示一个加载图标,直到 javascript 函数返回,但是在函数加载时页面上什么也没有出现;页面是白色的,没有做任何事情。

如果我使用 Chrome 进行调试,我会在调用该函数之前看到我的加载图标,然后在调用它时它会消失。我以为我可以对包含 Javascript 的 PHP 页面进行 AJAX 调用,但 AJAX 响应实际上包含该 javascript...

$.ajax({
  type: "POST",
  url: "resources/scripts/loadXML.php",
  data: "datafile="data_file_path,
  success: function(msg){
    alert( "Data Saved: " + msg );
  }
});

我把它拿回来了。MSG 等于这个(实际上是页面中的脚本)。

<script type="text/javascript">

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",<?php echo json_encode($data_file); ?>,false);
xmlhttp.send();
return xmlhttp;
</script>

我只是不希望我的页面是白色的,它会加载该功能吗......有什么想法!?

编辑:

我想异步运行此代码,以免它阻塞我的页面。我想在这个函数运行时看到一个微调器。以前,它在同一页面上,因此我可以轻松地将文件设置为打开,但现在如果我进行异步调用,我需要将它放在另一个文件中。但是,我如何将参数传递给这个文件?!:

<script type="text/javascript">

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",**$NEEDTOGETTHEFILENAME**,false);
xmlhttp.send();
return xmlhttp;
</script>
4

2 回答 2

0

添加一个beforeSubmit加载微调器或其他东西的处理程序,让用户知道页面正在加载。

$.ajax({
  type: "POST",
  url: "resources/scripts/loadXML.php",
  data: "datafile="data_file_path,
  beforeSubmit: function(){
        //show a spinner here
  },
  success: function(msg){
    //remove spinner
    alert( "Data Saved: " + msg );
  }
});
于 2012-05-23T23:52:05.263 回答
0

由于您正在使用 jquery 进行请求,因此最简单的方法是将请求包装在

$(document).ready(function(){
  //show spinner
  //your ajax request here
}

并在请求返回时隐藏或用您的内容替换微调器。

这就引出了一个问题:为什么要执行 1 个 ajax 请求来获取脚本来执行另一个 ajax 请求?你到底想在这里完成什么?

于 2012-05-24T00:00:56.647 回答