javascript - Jquery - 一个 AJAX 调用的多个函数调用

标签 javascript jquery ajax

我有一个页面,应该在初始页面通过 AJAX 加载一些数据后加载,然后在一些函数中使用该数据。

到目前为止,我只能让它单独加载 AJAX 请求(这意味着相同的请求被调用大约 30 次)

我需要的是能够有一个可以多次调用的函数,但只激活一次 AJAX 调用,其他时间返回数据,而无需再次执行已经返回数据运行的相同 AJAX 调用(因为这是多余的并且不需要,数据不会改变)。

现在我可以通过简单地进行调用并将其存储在全局变量中并检查该变量中是否有某些内容来做到这一点...

但是! “但是”是问题所在,大约 20 个需要 AJAX 传递信息的调用在 DOM 加载后立即发生,与 AJAX 调用一起发生。

所以我不能这样做,因为这 20 个请求发生在第一个 AJAX 调用完成显示所有数据之前。

我尝试使用“延迟”的 JQueries 做一些事情,但只能通过一次调用来完成,而不能几乎同时通过多个调用来完成,否则每次都会触发 AJAX 调用。

但我确信这一定是可能的!很好,没有某种循环和超时。我真的很喜欢部分加载页面和部分页面的想法。输入字段不会从一开始就加载,而是在准备好后立即交付,等等...

是吗?我真的无法理解这个......

$(function(){
    loadme1();
    loadme2(); /* loaded from complete different parts in the code, so not possible to start loadme2 only after loadme1 has everything finished */
});

function getData(){ 
    return $.get("/pathtogetthedata", {}, function(data){

    });
}

function loadme1(){
    getData().done(function(data){           
        var obj = $.parseJSON(data); 
        /* do something with obj */
    }
}
function loadme2(){
    getData().done(function(data){ //please just wait till the first call to the same method finished and give me that data or wait till it's in a global variable and I take it from there. Only make a call if there is no jquery "promise" waiting    
        var obj = $.parseJSON(data); 
        /* do something with obj */
    }
}

最佳答案

您必须保留所有“回调”,然后当数据准备好时,调用您刚刚保存的回调,例如:

var funcs = []

function exampleOfAjaxGetData(callback) {
    funcs.push(callback)
    if (funcs.length == 1) {
        setTimeout(function() {
            alert('This is need to be called once1')
            while (funcs.length > 0)
                funcs.pop()('The data return from ajax')
        }, 2000)
    }
}


exampleOfAjaxGetData(function(x) {
    alert('I got the data:' + x)
})

exampleOfAjaxGetData(function(x) {
    alert('I got the data:' + x)
})

jsFiddle:http://jsfiddle.net/yn5ayw30/

在示例中,我向您展示了一个需要 2 秒才能完成的函数。 我调用了该函数两次。但“setTimeout”只运行一次。当setTimeout完成后,它将运行所有等待应答的函数。

关于javascript - Jquery - 一个 AJAX 调用的多个函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33720083/

相关文章:

javascript - EJS CSS 不加载前端

javascript - ajax返回值不起作用

javascript - 在 QUnit 中使用 Mockjax?

javascript - 根据选择选项的值更改ajax url

jQuery ajax - 更新 div

javascript - iFrame 填充与源不同

javascript - Angular (jquery timepicker)无法检测到变化

jquery - $.fn[abcd] 是什么意思

jquery - jquery 在元素后面插入

php - 如何在 Web 应用程序上实现 RESTful 服务?