0

在我的应用程序中,我在$(document).ready()函数中进行了多个 ajax 调用。问题是浏览器一直处于“加载”状态,直到 ajax 调用返回。由于这些 ajax 调用大约需要 15-20 秒才能完成,这让我的页面加载时间长得令人作呕。
我的期望是,由于ajax调用是异步的,一旦所有页面加载请求完成,浏览器应该退出“加载状态”,而不关心 ajax 调用何时完成。

是否有其他事件之后我应该ajax拨打电话?我也尝试将ajax调用放在window.onload事件回调中,但我仍然遇到同样的问题。

编辑:代码非常简单。我在加载脚本的头部有一个带有一些脚本标签的 HTML 文件:

<head>
    <script src="script1.js"></script>
    <script src="script2.js"></script>
</head>

在我的一个脚本中,我有:

$(document).ready( 
     // 3 ajax calls
 );

我使用 Ajax 调用获取 JSON。现在,我在开发工具包中看到,只有当所有这三个 ajax 调用都返回时,浏览器才会退出“加载”状态。我还注意到,当我的页面加载网络请求被缓存时,浏览器不会等待这些 ajax 调用。但是对于空缓存,完成所有页面加载请求大约需要 3-4 秒,在这种情况下,ajax 调用也会导致浏览器保持“加载状态”。

请帮忙。谢谢!

4

4 回答 4

0

好的!为什么不在成功函数中调用 ajax 调用。

$.ajax({
.........
    success:function(){
        your load stuff here

       $.ajax({
           .........
           success:function(){
               your load stuff here
           }
      });
    }      // end of success of first ajax call
});

或者您可以在以下位置使用它complete function

$.ajax({
    .........
    success:function(){
        your load stuff here
    },
    complete:function(){
       $.ajax({
          .........
          success:function(){
               your load stuff here
          },
          complete:function(){

          }
       });
    }
});
于 2012-12-26T08:09:15.400 回答
0

我猜您正在尝试使用 AJAX 加载 DOM,对吗?因为如果同时存在 DOM 元素或另一个网页,那么加载您的页面就会出现问题,因为有多个页面要构建您的一个页面。因为$(document).ready()看起来你正在使用 JQuery 并且没有问题,并且正如你所提到的,你同时也有回调,那么调试一定还可以。如果您尝试执行上述操作,您可能会遇到问题,否则 ajax 应该不会很痛苦。

于 2012-12-26T07:54:19.333 回答
0

据我所知 .ready() 是一个在 DOM 完全加载时执行的函数。这意味着“加载”状态可能不是由您的 ajax 调用引起的。检查您的 DOM 是否包含 iframe 或在此处发布您的代码。

于 2012-12-26T07:55:27.953 回答
-3

Ajax 调用并不是真正的异步,Ajax 有助于在没有页面回发的情况下进行服务器调用。

假设您从 JavaScript 调用服务器端方法,在调用服务器端方法后,您的 JavaScript 将不会移动到下一行,直到它收到来自服务器的响应。

如果您使用 jQuery 进行 Ajax 调用,请将 asynch 属性设置为 true,然后它不会等待服务器响应。

于 2012-12-26T08:44:03.413 回答