按字母顺序排序Jquery列表

时间:2015-08-20 14:26:13

标签: javascript jquery

我从外部源提取数据,每次刷新后数据似乎都以不同的顺序出现。我不确定它是否与我的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;

2 个答案:

答案 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/