【发布时间】:2018-02-23 15:10:35
【问题描述】:
我有这个数组
var testFlows = ["test1","test2","test3","test4","test5"];
我正在尝试一一获取输入并生成一些 html(生成的 html 并不重要)。
重要的是我想按 testFlows 数组的顺序查看这个 html 面板。我的代码是完全随机的。如果我刷新页面,它们会位于不同的位置。
一种解决方案是制作一个同步 ajax,但它已被弃用且很糟糕,我还能做什么?
代码:
var testFlows = ["test1","test2","test3","test4","test5"];
$.each(testFlows, function (index, testFlow) {
//get the inputs
$.ajax({
url: '/flow/getInputs',
type: 'post',
data: {testCaseName: testFlow.testCase.name},
success: function (inputNames) {
testCaseAccordion = '<div class="panel panel-default"><div class="panel-heading"><h4 class="panel-title"><a class="collapseTitle" data-toggle="collapse" data-parent="#accordion" href="#collapse-' + testFlow.testCase.name + index + '">' + testFlow.testCase.name + '(' + testFlow.testCase.type.name + ') <span id="eyeIcon" class="fas fa-eye float-right"></span></a></h4></div>';
testCaseAccordion += '<div id="collapse-' + testFlow.testCase.name + index + '" class="panel-collapse collapse"><div id="panel-body-' + testFlow.testCase.name + index + '" class="panel-body"></div></div>';
$('#accordion').append(testCaseAccordion);
if (testFlow.params !== null) {
var inputs = testFlow.params.split(',');
for (var i = 0; i < inputs.length; i++) {
$('#panel-body-' + testFlow.testCase.name + index).append('<strong class="color-red">' + inputNames[i] + ': </strong>' + inputs[i] + '<br>');
}
}
else {
$('#panel-body-' + testFlow.testCase.name + index).append("This test case doesn't have any inputs");
}
}
});
});
【问题讨论】:
-
如果我使用
async: false,编写代码,它可以工作。但我不想要那个 -
在单个请求中发送所有数据(即整个数组),然后根据需要循环遍历从请求返回的数组
-
我建议使用 Promise。
-
真的不需要随机加粗你的问题的各个部分,这有点烦人 阅读。
-
我同意罗里的观点。当你只能发出一个 HTTP 请求时,不要发出 10 个 HTTP 请求,发送一个包含 10 个元素的数组。
标签: javascript jquery ajax