我在“for”循环中创建对elasticsearch服务器的ajax调用。我面临的问题是,响应没有按正确的顺序排列(即按照循环使用客户端生成的顺序)。如何使呼叫和响应同步?
答案 0 :(得分:0)
你可以这样做:
$(document).ready(function(){
function extendFuncChain(url, callback) {
func_chain_list.push(function() {
$.ajax({
url : url,
type: 'GET',
contentType:"application/json"
}).done(function(data) {
console.debug(data);
callback();
});
});
}
var func_chain_list = [function() {}];
for(var i=1; i<=4; i++) {
var url = "http://localhost:9200/test_index/doc/" + i;
var callback = func_chain_list.pop();
extendFuncChain(url, callback);
}
func_chain_list.pop()();
});
为了测试它,我设置了一个包含4个文档的简单索引:
DELETE /test_index
PUT /test_index
POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"name": "doc1"}
{"index":{"_id":2}}
{"name": "doc2"}
{"index":{"_id":3}}
{"name": "doc3"}
{"index":{"_id":4}}
{"name": "doc4"}
然后,当我将javascript放入网页并加载它时,我在控制台中获得此输出(我扩展了最后一个):
希望你能看到如何概括这一点来做你需要的事情。对extendFuncChain
的调用非常重要,因为关闭在JS中的工作方式,如果你把它拿出来它就不会工作。