Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 针对所有浏览器的多个ajax和async false_Jquery_Ajax - Fatal编程技术网

Jquery 针对所有浏览器的多个ajax和async false

Jquery 针对所有浏览器的多个ajax和async false,jquery,ajax,Jquery,Ajax,我一次调用多个ajax 例如: $.ajax({ type:'POST', url:url1, aysnc:false, beforeSend:function() { $("#loader").show(); }, success:function(data) { ///.....do mani

我一次调用多个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正在调用。请帮助我尝试了所有解决方案。

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

我有一个解决方案:首先调用FirstAjax,然后将另一个调用FirstAjax的成功函数

这样,就可以将所有ajax设置为嵌套。所以,您可以使用第一个ajax调用启动loader,并使用最后一个ajax调用停止

像这样的

$("#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();
          }
        });


      }
   });

永远不要使用同步ajax调用,而是围绕ajax的异步特性工作。换句话说,尽可能远离
async
设置,不要屈服于将其设置为false的冲动,因为它违背了ajax的全部目的

要通过多个异步调用实现这一点,您应该使用捕获ajax函数返回的所有承诺,然后在它们全部完成时触发回调,类似这样

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

你说的完全正确,但它一直流到第二个ajax调用,第三个ajaxI调用失败。我尝试了这些方法,但加载程序没有隐藏:(:(