我开始学习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> ****
如何一致地制作这些部件?
答案 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);
});
});
});