我的getJSON调用是随机返回的结果,而不是它们被调用的顺序

我需要发出多个getJSON请求来将数据写入HTML文件。 此示例显示3个请求,但我将以相同的格式添加最多6个请求(可能更多)。

我的问题是结果以随机顺序返回,而不是按照它们被调用的顺序返回。 我怀疑他们是按照请求完成的顺序返回的。

我必须每次都以相同的顺序编写div。

这些值是从getJSON请求返回的,每个请求中的两个实例来自本地的一组vars( nwsltrID[0]nwsltrNames[0] },这些变量对每个请求都是唯一的。因此,我附加的HTML变为可变的因为这两个变量(在代码示例中显示)。

代码示例:

 $.getJSON(url0, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append("
" + nwsltrNames[0] + "
" + data[0].conversation + "
" + ltrDay + "
" + data[0].textHead + "
"); }); $.getJSON(url1, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append("
" + nwsltrNames[1] + "
" + data[0].conversation + "
" + ltrDay + "
" + data[0].textHead + "
"); }); $.getJSON(url2, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append("
" + nwsltrNames[2] + "
" + data[0].conversation + "
" + ltrDay + "
" + data[0].textHead + "
"); });

我确定我在这里做了一些其他可以改进和优化的新手。 所以,我渴望听到所有的建议。

我希望我已经提供了足够的信息来解决这个问题。

要订购AJAX查询,您可以使用$ .when函数 – http://api.jquery.com/jquery.when/

以下是您的示例:

 $.when( $.getJSON(url0), $.getJSON(url1), $.getJSON(url2) ).done( function() { $.each(arguments, function(index, result) { var data = result[0]; utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append(... + nwsltrID[index] + .... + nwsltrNames[index] + ... ); }); }); 

无论您有多少查询 – 只需将其添加为$ .when函数的参数!

你可以链接你的电话:

 $.getJSON(url0, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append("
" + nwsltrNames[0] + "
" + data[0].conversation + "
" + ltrDay + "
" + data[0].textHead + "
"); $.getJSON(url1, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append("
" + nwsltrNames[1] + "
" + data[0].conversation + "
" + ltrDay + "
" + data[0].textHead + "
"); $.getJSON(url2, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv').append("
" + nwsltrNames[2] + "
" + data[0].conversation + "
" + ltrDay + "
" + data[0].textHead + "
"); }); }); });

AJAXA是异步的:请求是并行完成的,服务器并行响应,浏览器并行接收响应。 每个请求都有自己的速度。

可能是这个函数异步工作吗? 所以它触发所有三个并且完成的函数的回调(无论它将是谁)开始追加:o?

您可以让这些function在同步模式下工作

或者你可以从#listDiv中的单独div开始

  $('#listDiv').append('
'); $.getJSON(url0, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv .ellipsis0').append('
' + nwsltrNames[0] + '
' + data[0].conversation + '
' + ltrDay + '
' + data[0].textHead); }); $.getJSON(url1, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv .ellipsis1').append('...' + data[0].textHead); }); $.getJSON(url2, function (data) { utcday = data[0].createdOn; ltrDay = moment.utc(utcday).format("DD MMM YY"); $('#listDiv .ellipsis2').append('...' + data[0].textHead); });