Jquery 同时执行同步和异步AJAX
我想运行AJAX来获取一些URL数据,从数据中构建一个对象,并将其分配给一个全局对象变量。所以我知道我需要运行一个同步ajax请求。(对吗?)我还想利用发送前设置为我的用户提供一个加载屏幕。(我可能应该首先问,beforeSend是实现这一点的唯一方法吗?)我如何将同步和异步的优点结合起来 异步:Jquery 同时执行同步和异步AJAX,jquery,ajax,asynchronous,synchronous,Jquery,Ajax,Asynchronous,Synchronous,我想运行AJAX来获取一些URL数据,从数据中构建一个对象,并将其分配给一个全局对象变量。所以我知道我需要运行一个同步ajax请求。(对吗?)我还想利用发送前设置为我的用户提供一个加载屏幕。(我可能应该首先问,beforeSend是实现这一点的唯一方法吗?)我如何将同步和异步的优点结合起来 异步: $.ajax({ url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ dataType:'h
$.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请求。从文件中: 请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作
更好的做法是发出异步请求并设置微调器,让用户知道您正在为他们检索数据 嗯,很明显,如果您想在同步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放在一个单独的函数中并以同样的方式运行,除了同步ajax调用之外,还有许多其他选项 如果HTML5是一个变体,那么使用一个怎么样?哇,他们有这些吗?!。。。我想如果有,那会很酷。程序员已经想到了一切。我会研究的。现在它仅仅是HTML5的东西吗?是的,所以IE仅限于版本10。但其他浏览器的最新版本似乎还可以。您可以通过使用它并使用常规jQuery解决方案添加回退来为将来做好准备。。。我想这正是我想要的。执行同步的原因是,我希望将页面加载保存到一个全局变量中,并且仅当我还没有该页面的数据时才运行ajax。我从Gmail中得到了这个想法,你可以在不运行新线程的情况下查看你已经看过的邮件。我假设gmail只是将数据保存到一个全局变量上,并在已经查看过的情况下调用它。我在哪里可以找到关于该变量的文档(.done、.fail、.always)?我只能在.ajax()doc.gmail中找到对它的引用,它使用SPDY(speedy),这是谷歌自己的类似WebSocket的实现。done()、fail()和always()将在更新版本的jQuery中使用$.ajax,而$.post只是$.ajax函数的快捷方式。因此,如果我理解正确,我可以运行异步函数,然后调用。done将数据发送到全局变量?是的,可以,但也可以将ajax函数存储在变量中,如上所述,只需使用该变量,最好是在其他名称空间中,然后在窗口(全局)中使用,您甚至可以检查该变量是否存在,如果不存在,只需运行ajax函数。还有一些承诺,比如when(),then()等等。
$('#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);
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);
});
});