Css更改不适用于同步ajax调用

时间:2016-10-22 13:53:39

标签: javascript jquery css ajax

出于某些原因,我想使用async : false进行同步 ajax调用,因为我想等待每个请求完成以执行下一个请求。

但它不起作用,css更改$(...).css( "opacity" , "1" )无效。

但当我切换到async : true时,它可以正常工作!!

$( ".foo" ).each(function( i , item ) {

    $(item ).find(".ajaxLoader").css( "opacity" , "1" );    
    $.ajax({ 
        async    : false,
        ....
        complete : function(){ $(item ).find(".ajaxLoader").css( "opacity" , "0" ); }
    }); 

});

4 个答案:

答案 0 :(得分:1)

答案是因为您使用不相关的同步ajax调用来锁定UI,就像@epascarello告诉您的那样。不要使用同步请求... 你可能不需要任何循环,因为你可以从一个ajax调用获得所有相关数据我猜如果你想做一些ajax请求(这次是异步!)顺序,那么你可以使用:

var d = $.Deferred().resolve();
$(".foo").get().forEach(function(foo) {      
  d = d.then(function() {
    return $.ajax({
      /*async: true,*/
      ....
      beforeSend: function(){
        $(foo).find(".ajaxLoader").css("opacity", "1");
      },
      complete: function() {
        $(foo).find(".ajaxLoader").css("opacity", "0");
      }
    });
  });
});

答案 1 :(得分:1)

这是一个有趣的问题/任务,我可以解决这个问题。我非常喜欢它。

可能会看起来有点奇怪,我使用0.5 seconds延迟进行测试,但您可以根据您的情况更多地优化代码。

正在使用 Fiddle

希望这会对你有所帮助。

此致

答案 2 :(得分:0)

使用beforeSend()

ajax功能试一试
$.ajax({
    beforeSend(){
        $(item ).find(".ajaxLoader").css( "opacity" , "1" );
    },
    ...
})

文档链接:http://api.jquery.com/jquery.ajax/

答案 3 :(得分:0)

如果你的Uri uri = Uri.parse("smsto:" + "<number>"); Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri); sendIntent.putExtra(Intent.EXTRA_TEXT, "YOOOH"); // sendIntent.setType("text/plain"); sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); div有完整的高度和宽度,这个div会导致解决问题,你最好在ajax响应成功时隐藏div,请在这里取悦。

.ajaxLoader