一致的事件不正确

时间:2017-04-26 09:50:39

标签: jquery asp.net-web-api

我开始学习JS和WebApi.Net 我的问题:part_2在part_1之前执行,但有时它可以正常工作。

//**** <part_1> ****
var link = 'api/Values',
  ttMass = new Array(); //make ToolTip array

$(document).ready(function() {
  $.get(link, {
    i: 1
  }, function(data) { //http-response as 'api/Values/1'
    $.each(data, function(i, val) {
      ttMass.push(val);
    });
  });
});
//**** </part_1> ****

//**** <part_2> ****        
$(document).ready(function() { //
  $.get(link, {
    i: 0
  }, function(data) { //http-response as 'api/Values/0'
    $.each(data, function(i, val) {
      $(sel).append('<option value="' + val + '" data-toggle="tooltip" data-placement="right" title="' + ttMass[i] + '">' + val + '</option>'); //fill <select> values and ToolTip
    });
  });
});
//**** </part_2> ****

如何一致地制作这些部件?

1 个答案:

答案 0 :(得分:1)

$.get次呼叫是异步的,因此无法保证其响应顺序,因为它低于接收方服务器的速度。

如果您需要保证它们按顺序执行,请将一个电话放在另一个电话的回调中。

另请注意,您的ttMass数组是多余的,因为它包含与data中返回的完全相同的值,因此您可以在没有each()循环的情况下直接使用它。试试这个:

var link = 'api/Values';

$(document).ready(function() {
  $.get(link, { i: 1 }, function(ttMass) {
    $.get(link, { i: 0 }, function(data) {
      var html = data.map(function(val, i) {
        return '<option value="' + val + '" data-toggle="tooltip" data-placement="right" title="' + ttMass[i] + '">' + val + '</option>';
      });
      $(sel).append(html);
    });
  });
});