所有浏览器都有多个ajax,异步为false

时间:2014-06-12 09:22:20

标签: jquery ajax

我一次进行多次ajax调用

示例:

  $.ajax({
         type:'POST',
         url:url1,
         aysnc:false,
         beforeSend:function()
         {
               $("#loader").show();
         },
         success:function(data)
         {
            ///.....do manipulation
            $("#loader").hide();
          }
       });


       $.ajax({
         type:'POST',
         url:url1,
         aysnc:false,
         beforeSend:function()
         {
               $("#loader").show();
         },
         success:function(data)
         {
            ///.....do manipulation
            $("#loader").hide();
          }
       });

       $.ajax({
         type:'POST',
         url:url1,
         aysnc:false,
         beforeSend:function()
         {
               $("#loader").show();
         },
         success:function(data)
         {
            ///.....do manipulation
            $("#loader").hide();
          }
       });

我需要显示加载器,直到ajax成功上面的代码才能在FIREFOX中工作,但不能在IE和CHROME中,因为没有看到加载器但我的ajax被调用请帮助我尝试所有解决方案

2 个答案:

答案 0 :(得分:1)

当我们使用aysnc:false调用ajax时,某些浏览器会停止所有动画。

我有一个解决方案:首先先调用ajax,然后将其他内容放到第一个ajax的成功函数中......

像这样,你可以设置所有嵌套的ajax。所以,你可以通过第一个ajax调用启动loader并使用last ajax call停止...

像这样......

$("#loader").show();

$.ajax({
     type:'POST',
     url:url1,

     success:function(data)
     {
        ///.....do manipulation

        $.ajax({
         type:'POST',
         url:url1,
         beforeSend:function()
         {
               $("#loader").show();
         },
        success:function(data)
         {
            ///.....do manipulation
            $("#loader").hide();
          }
        });


      }
   });

答案 1 :(得分:0)

永远不要使用同步ajax调用,而是改变ajax的异步性质。换句话说,尽可能远离async设置,不要屈服于将其设置为假的冲动,因为它会破坏ajax的整个目的。

要使用多个异步调用执行此操作,您应该使用$.when来捕获ajax函数返回的所有promise,然后在完成所有操作后触发回调,类似这样

function doAjax() {
    $("#loader").show();
    $.when(
        $.ajax({
            type : 'POST',
            url  : url1
        }),
        $.ajax({
            type : 'POST',
            url  : url2
        }),
        $.ajax({
            type : 'POST',
            url  : url3
        })
    ).done(function() {
        $("#loader").hide();
    });
}