为什么用以下JS代码调用两个ajax请求

Why two ajax request is called with following JS code?

本文关键字:两个 请求 ajax 调用 JS 代码 为什么      更新时间:2023-09-26

我有以下代码从服务器中提取数据。我想在document.ready()上调用它。我希望第一个请求是向服务器发出的,得到响应,第二个请求是发出的,依此类推

但我在Firebug中看到,在初始页面加载时有两个对服务器的请求。我不知道为什么两个要求。这是我的密码。

;var EVENTS = {};
;(function($) {
EVENTS.Collector = {
events: [],
getEventsData: function() {
    var postData = {
        'jsonrpc': '2.0',
        'id': RPC.callid(),
        'method': "events.getNewOrUpdated",
        'params': {},
        'auth': RPC.auth()
    };
    var events_request = $.ajax({
        url: RPC.rpcurl(),
        contentType: 'application/json-rpc',
        type: "POST",
        data: JSON.stringify(postData),
        timeout: 30000
    });
    events_request.done(function(results) {
        //console.log("Info " + results);
        if (results.result.result !== null) {
            if (EVENTS.Collector.events.length !== 0) {
                alert(EVENTS.Collector.events.length);
            } else {
                alert(EVENTS.Collector.events.length);
            }
        }
    });
    events_request.fail(function(results) {
        //console.error("Error " + results);
        $("Error Message").insertAfter('.error');
    });
    events_request.always($.proxy(this.getEventsData, this));
} 
};
})(jQuery);
EVENTS.Collector.getEventsData(); //function call

提前感谢

如果删除下面的代码,它会调用吗?

EVENTS.Collector.getEventsData(); //function call
默认情况下,ajax请求是异步的。如果您希望每个请求在完成之前都是"阻塞"的,那么继续下一步,只需将async: false添加到ajax调用参数即可发送同步请求。

试一下下面的片段,如果这是你想要做的。。??。

var events_request = $.ajax({
    url: RPC.rpcurl(),
    contentType: 'application/json-rpc',
    type: "POST",
    async: false,
    data: JSON.stringify(postData),
    timeout: 30000
});

考虑同步请求导致解释器函数指针等待,直到调用返回任何结果,或者直到请求超时。