同时执行同步和异步AJAX

我想运行AJAX来获取一些URL数据,从数据构建一个对象并将其分配给一个全局对象变量。 所以我知道我需要运行同步 ajax请求。 (对吧?)我也想利用beforeSend设置给我的用户一个加载屏幕。 (我可能应该首先询问,是在发送之前实现它的唯一方法吗?)我如何结合使用同步和异步的好处?

异步:

$.ajax({ url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ dataType:'html', beforeSend:function(){ $('#display').html('
'); }, success:function(data, textStatus, jqXHR){ /*local*/ myobj = getMyObj(data); $('#display').html(myobj); }, error:function(jqXHR, textStatus, errorThrown){ } });

同步:

 $.ajax({ url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ dataType:'html', async:false, success:function(data, textStatus, jqXHR){ /*global*/ myobj = getMyObj(data); } }); $('#display').html(myobj); 

对不起,如果这没有意义

嗯,很明显,如果你想在同步ajax函数之前显示一些内容,你可以:

 $('#display').html('
'); $.ajax({ url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ dataType:'html', async:false, success:function(data, textStatus, jqXHR){ /*global*/ myobj = getMyObj(data); } }); $('#display').html(myobj);

另一方面为什么要使用同步Ajax函数,这是一个非常糟糕的主意,改为使用promises,或者类似的东西:

 var Ajax = $.ajax({ url:'scripts/scripts.php?call=page&url='+thisurl, dataType:'html' }); //do something later $("#mybutton").on('click', function() { Ajax.done(function(data) { //if/when the ajax function is completed $('#display').html(data); }); }); 

或者将ajax放在一个单独的函数中并以相同的方式运行,除了同步Ajax调用之外还有很多选项!

有可能你真的不想做同步的AJAX请求。 从jQuery.ajax文档:

请注意,同步请求可能会暂时锁定浏览器,在请求处于活动状态时禁用任何操作

更好的做法是创建异步请求并设置微调器以让用户知道您正在为它们检索数据。