2012-02-27 45 views
0

我想在正常的http请求期间发送“Loading ..”/“In Progress ..”消息。这应该只在http请求周期中显示,一旦你得到请求完成,你得到的回应,它应该关闭。我热衷于定期的HTTP请求和HTTP请求,花费更长的时间而不是AJAX。代码块,例子,指针表示赞赏。这里有一种方法,我想要有通用的方法,以便它可以用于任何http请求。在javascript/jquery/php的http请求(长时间运行)执行期间显示“正在进行”

+0

可能重复[延伸jQuery的ajax功能](http://stackoverflow.com/questions/8358422/extending-jquerys-ajax-function) – 2012-02-27 20:40:57

+0

@MarkSchultheiss在这里我们谈论的不是ajax东西,而是一个普通的http请求/响应fyi给你。 – nepsdotin 2012-02-27 20:44:53

回答

0

基本上,当执行正常的HTTP请求(不是AJAX)时,客户端浏览器已经提供了一个进度指示器。这个指标在浏览器和平台之间会有所不同,你不能依赖它。

当您离开页面时,您的JavaScript停止工作,因此不要寻找JavaScript解决方案来显示此类进度指示器。根据这个HTTP请求被触发的方式,可能有不同的方式来实现这一点。例如,如果在标记中有一个定位标记触发正常的HTTP请求,则可以订阅此定位点的点击处理程序,并使用JavaScript显示动画旋转,然后让浏览器执行重定向。

就AJAX请求而言,您可以订阅.ajaxStart().ajaxComplete()全局处理程序来分别显示和隐藏某个微调器。

当然,一切都取决于实施。没有任何魔术解决方案可以处理所有可能的情况。所以基本上你必须找到适合你的具体情况的解决方案,不幸的是你没有详细说明。

0

页面完全加载后,页面上可能会隐藏一个元素。例如: -

<img id="loading" src="loading.gif" alt="Loading..." /> 

<script type="text/javascript"> 

$(function() { 
    $('img#loading').hide(); // Called when whole page has been loaded 
}); 

</script> 
+0

难道你不想用$(window).ready()来代替吗? – shaunsantacruz 2012-02-27 20:50:49

1

您应该使用beforeSend和完整的事件:

$.ajax({ 
    ... 
    beforeSend: function(){ 
     //Here you loading SHOW 

    }, 
    complete: function(){ 
    //Here you loading HIDE 

    } 
    ... 
}); 
0

我认为这是不可能使纯JavaScript的HTTPRequest同步呼叫(而不是在JQuery中的情况下)中的任何信息。如果在调用send方法之前更改样式类,则不会呈现此信息。

要解决这个问题,我改变来电异步调用,则样式,类..变化可以调用返回之前渲染(使用的onreadystatechange得到的结果和复位风格)的