我遇到以下代码块问题:
function MediaImport4pr(nbr) {
$("#latestPr ul.list").empty();
$.ajax({
url: "/aQ_OX/local/LATESTPR/LatestPr.txt",
dataType: "text",
success: function(data) {
//var array = data.split(',');
var array = data;
var arrayWithRightNumberOfPr = ["tst4_01-11-2014.aspx", "tst1_11-06-2014.aspx", "tst2_10-05-2014.aspx", "tst5_27-03-2014.aspx"];
for (im = 0; im < arrayWithRightNumberOfPr.length; im++) {
AjaxRequest(im, arrayWithRightNumberOfPr);
}
}
});
}
function AjaxRequest(im, array) {
$.get("/aQ_OX/LOCAL/ASPXGENERATED/" + array[im], function(data) {
var targetTitle = $(data).find('#title').html();
var targetDate = $(data).find('#date').html();
var targetPdf = $(data).find('#pdf').html();
if (targetPdf != "noPDF") {
$("#latestPr ul.list").append("<li class='item pr" + im + "'><p class='date'>" + targetDate + "</p><ul><li class='title'><a class='title' href='/aQ_OX/LOCAL/ASPXGENERATED/" + array[im - 1] + "'>" + targetTitle + "</a></li><li class='pdf'><a class='pdf' href='" + targetPdf + "'>PDF</a></li></ul></li>");
} else {
$("#latestPr ul.list").append("<li class='item pr" + im + "'><p class='date'>" + targetDate + "</p><ul><li class='title'><a class='title' href='/aQ_OX/LOCAL/ASPXGENERATED/" + array[im - 1] + "'>" + targetTitle + "</a></li></ul></li>");
}
});
}
基本上,这段代码生成“li”标签,问题是“for”循环每次运行时都会以非常不同的数字开头。 我只是期望0,1,2,3等,但有时我有0,1,3,4或2,3,0,1等......
答案 0 :(得分:1)
不是实际问题,而是良好做法:通过添加im
使循环计数器var
成为本地的(它当前是全局的,因此在所有并行调用MediaImport4pr时共享)
for (var im = 0; im < arrayWithRightNumberOfPr.length; im++)
无法保证订单:
问题完全在于期望Ajax结果的顺序与请求相同......但是Ajax不能保证哪些请求会先返回。您需要确保响应中有足够的信息,以便按所需顺序将结果插入显示中(并且不假设有关传入订单的任何信息)。
减少请求:
第二个时间问题是服务器的响应时间和请求数。检查您要发送的多个请求的网络流量和时间安排(例如,通过F12 Chrome调试工具,网络标签)。
基本上,您发生了“大量”网络呼叫,浏览器将限制同时进行的Ajax呼叫数量。也许组合成更少的调用返回更多的数据?在这种情况下,具有10倍数据的单个请求优于10个较小的调用。这也将解决排序问题,因为返回结果数组将由服务器预定义:)