Jquery 同时执行同步和异步AJAX

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数据,从数据中构建一个对象,并将其分配给一个全局对象变量。所以我知道我需要运行一个同步ajax请求。(对吗?)我还想利用发送前设置为我的用户提供一个加载屏幕。(我可能应该首先问,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请求。从文件中:

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


更好的做法是发出异步请求并设置微调器,让用户知道您正在为他们检索数据

嗯,很明显,如果您想在同步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);
    });
});