jquery - 同时执行同步和异步 AJAX

标签 jquery ajax asynchronous synchronous

我想要运行 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/

相关文章:

javascript - jQuery 在点击时追加 div

php - 如何使用 jquery ajax 获取文件列表

ajax - 错误: <f:ajax> contains an unknown id when used with composite:insertChildren

javascript - 验证Cookie是否存在并存储信息

javascript - Jquery 立即向下滚动到一个类

javascript - 使用 js 设置加载屏幕高度 - 如何防止 JS 运行前高度错误的闪烁?

javascript - 如何使 ajax 数据在我的 php 文件上工作

jquery - 使用 jQuery 进行异步 AJAX 查询

java - 是Throwable类的printStackTrace(),异步

c# - Task.Factory.StartNew 与 Task.Factory.FromAsync