【问题标题】:Why two ajax request is called with following JS code?为什么用下面的 JS 代码调用两个 ajax 请求?
【发布时间】:2014-09-16 10:43:05
【问题描述】:

我有以下代码从服务器中提取数据。我想在 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

提前致谢

【问题讨论】:

  • 你有一个有效的例子吗?小提琴还是笨蛋?另外,您是否尝试设置调试点?这将显示调用从哪里调用..
  • 是否打算在所有请求之后调用 getEventsData?
  • @Alphonso 我已经在我的项目中使用了上面的代码,啊..对不起,我已经尝试过使用 Firebug 但无法得到答案。
  • @Mihir getEventsData 旨在在 document.ready() 上调用
  • 在您的代码中,它在所有通过events_request.always($.proxy(this.getEventsData, this)); 的ajax 请求之后执行您可以尝试评论该行。

标签: javascript jquery ajax long-polling


【解决方案1】:

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

EVENTS.Collector.getEventsData(); //function call

【讨论】:

  • 不,删除后,不会调用任何 ajax 请求。你能解释一下你为什么要删除吗?
【解决方案2】:

默认情况下,ajax 请求是异步的。如果您希望每个请求在完成之前都处于“阻塞”状态,然后继续下一步,您只需将 async: false 添加到 ajax 调用参数即可发送同步请求。

试试下面的sn-p,如果这是你的意思..??.

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

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

【讨论】:

  • 您的代码正在使用阻塞模式,因此每次只调用相同的 ajax(above) 请求。但是我也有来自另一个 JS 文件的其他 ajax,当我在上面的 ajax 设置中设置“async:false”时,它们完全没有被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2013-01-18
  • 2012-05-28
相关资源
最近更新 更多