我想要运行 AJAX 来获取一些 URL 数据,从数据构建一个对象并将其分配给全局对象变量。所以我知道我需要运行一个同步 ajax 请求。 (对吗?)我还想利用 beforeSend 设置为我的用户提供加载屏幕。 (我可能应该首先问,beforeSend 是实现这一目标的唯一方法吗?)我如何将同步和异步的优点结合起来?
异步:
$.ajax({
url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/
dataType:'html',
beforeSend:function(){
$('#display').html('<div class="loading"></div>');
},
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('<div class="loading"></div>');
$.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 函数,这是一个非常糟糕的主意,请使用 Promise 来代替,或者类似的东西:
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 调用之外还有很多选择!
关于jquery - 同时执行同步和异步 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952242/