1

我在 ajax.php 页面中放了一个 sleep(5)。我需要返回的代码来启动另一个功能组。它也使用ajax。我的第一个 ajax 调用如下所示:

$.ajax({
  url: '/ajax.php',
  data: {
    id : code
  } ,           
  type: 'POST',
  async:false, //<<< here
  cache: false,
  beforeSend: function(){
      $('#loading').dialog();
  },
  success: function(data){                 
      console.log(data.result);           
      $('#loading').dialog('close'); 
      initAnotherFunctionGrop(data.result);
  },
  error: function(){
      $('#loading').dialog('close');
  }
});

为什么我无法在 IE 和 Chrome 中显示加载消息?只有 Firefox 正在使用它。

4

4 回答 4

0

异步代码是最好的。同步代码可能会挂起您的浏览器,这对于 ajax 来说是个坏主意,其中 ajax 请求的速度取决于用户计算机和浏览器之外的因素。你不希望用户机器挂起,所以避免它。而是尝试这样的事情。

 function a(passedData){
      return $.ajax({ 
          url : '/ajax.php',
          data : passedData
      });
 }

 function b(passedData){
      return $.ajax({ 
          url : '/ajaxB.php',
          data : passedData
      });
 }

 $.when(a(data),b(data)).then(function(successDataForA,successDataForB){
     //Do code after all asynchronous ajax calls are done.
     //As a whole this is still asynchronous so other things can still run
 },function(failA,failB){
     //This fail callback is not necessary but here it is if needed
 });
于 2012-09-04T03:49:31.133 回答
0

用这个

    $(document).ready(function () {

        $('#ajaxloading').hide()  // hide it initially
             .ajaxStart(function () {
                 $(this).show();
             })
             .ajaxStop(function () {
                 $(this).hide();
             });
    });

这里的“ajaxloading”是你想要显示或隐藏的DIV的ID。你可以在这个div里面放任何内容

于 2012-09-04T04:02:22.827 回答
0

如果您的加载图像是 gif 图像,则很难在 IE 和 chrome 中显示它,因为这些浏览器在同步调用时会停止对 DOM 组件的任何更改,并且一旦执行代码,它就会显示所有更改。您可以通过在加载图像后放置一个警告框来测试它。

$('#loading').dialog();
alert('loading image');

一旦弹出警报,您现在可以看到在 IE 和 chrome 中加载图像作为警报停止线程执行,直到用户给出响应。

阅读此链接: [https://stackoverflow.com/questions/11946828/loading-gif-image-is-not-showing-in-ie-and-chrome]

于 2012-09-04T04:37:37.777 回答
0

我在过去让 IE 在 Ajax 调用期间显示“正在加载...”消息时遇到过问题,即使是异步调用(我当然建议你使用),其中相同的代码在 FF 中确实有效.

使用 IE 对我有用的解决方法(并且在 FF 中没有伤害)是做这样的事情:

$('#loading').dialog();
setTimeout(function() {
    $.ajax(...);
},1);

也就是说,显示“正在加载”消息,然后通过使用推迟 Ajax 调用setTimeout()- 这使浏览器有时间在当前 JS 完成后但在超时开始之前重绘页面。

但是,当然,如果您正在执行同步请求,您可能有其他代码要在$.ajax()使用其结果的方法之后运行,因此您需要将所有这些移动到您传递给的函数中setTimeout()(或从那里调用它, 反正)。

于 2012-09-04T05:31:12.170 回答