出于某些原因,我想使用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" ); }
});
});
答案 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" );
},
...
})
答案 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