我正在尝试对服务器进行jsonp调用,这是代码的样子:
function myCallback(data) { var self = this; var currentId = data.ID; if(currentId == self.latestId){ console.log("latest request responded, do something"); self.latestId = new Date().getTime(); } else { console.log("old request responded, so we don't care"); } }; function makeCall() { var self = this; self.latestId = new Date().getTime(); var url = serverUrl + "&ID="+ self.latestId; $.ajax(url,{ dataType: "jsonp", timeout: 10000, cache: true, jsonp:"callback", jsonpCallback: "myCallback", error: function(id) { return function() { if(id == self.latestId) { console.log("latest request errored out");//might be due to timeout self.latestId = new Date().getTime(); // updating latestid so mycallback ignore this request } else { console.log("old request errored out, so we don't care anymore"); } } }(self.latestId) }); };
来自服务器的响应看起来像myCallback({some_data ...});
当只有一个请求被触发时,它按预期工作,但是当我用相同的数据激发4-5请求时,Id控制既没有转到myCallback也没有错误,而服务器及时响应成功。这不会持续发生,因此看起来像是同步问题。在进行多个查询时,使用命名回调时是否存在任何同步问题。在多个查询的情况下,只有最后一个应该赢,但看起来不像在这里工作。由于每个请求都有相同的回调名称,这可能是一个问题吗?
我对这里发生的事情毫无头绪,有人遇到过这样的事情。
编辑:看起来它与并行请求的回调名称有关,提到Parallel JSONP requests in jQuery do not trigger multiple "callback events"?