我从外部源提取数据,每次刷新后数据似乎都以不同的顺序出现。我不确定它是否与我的jquery或缺乏相关。或者,如果它与我用于收集数据的Google财经数据相关。理想情况下,我希望按字母顺序排列第一列。
我坚持认为必须有一种方法对数组进行排序,而不会随机填充列表。 的jsfiddle:
https://jsfiddle.net/vkf0jhpq/
$(document).ready(function () {
for (var i = 0; i < gstock.length; i++) {
$.getJSON("https://finance.google.com/finance/info?client=ig&q=" + gstock[i] + "&callback=?", function (response) {
var stockInfo1 = response[0];
var divContainer = $('*[data-symbol="' + stockInfo1.t + '"]');
var percentStock = !isNaN(stockInfo1.c) && !isNaN(stockInfo1.l) && stockInfo1.l ? ((parseFloat(stockInfo1.c)/parseFloat(stockInfo1.l)) * 100) : undefined;
答案 0 :(得分:1)
您的问题是您正在进行异步调用以获取每个库存(意味着它们将同时运行),然后在调用成功时附加每个项目。
这意味着每个项目都将根据执行请求所需的时间进行追加,因此如果第一个请求比第二个请求略长,第二个请求将在第一个请求之前显示(这就是为什么它们似乎是以随机顺序)。
停止此操作并保留订单的一种方法是make the calls synchronous,但我认为这会使您的网页加载时间更长。
另一种方法是使用.when
以便您可以使用ajax填充var,然后在完成所有调用后,您可以将生成的var排序为所需的顺序,然后将它们附加到文件
This is a quick example显示一种方法可以使附加项保持与gstock
var
答案 1 :(得分:1)
您无法在跨域值中使用$ .ajax()的同步调用。您必须使用此语法
$.when( $.getJSON( YOUR_RESOURCE ) ).then( function( data, status, jqXHR ) {
alert( jqXHR.status );
});
根据http://api.jquery.com/jQuery.when/
更新:请参阅此示例
$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
// a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
// Each argument is an array with the following structure: [ data, statusText, jqXHR ]
var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
if ( /Whip It/.test( data ) ) {
alert( "We got what we came for!" );
}
});
UPDATE2:
jsfiddle示例(仅限console.log但正常工作)https://jsfiddle.net/k41y4yqu/1/