【发布时间】:2010-07-14 23:17:32
【问题描述】:
我写了一些代码,在你选择国家后过滤省/州选择字段:
var cache = {};
function updateProvinceOptions($select, values, initial) {
for(i in values) {
$select.append('<option value="'+values[i][0]+'">'+values[i][1]+'</option>');
}
$select.val(initial).trigger('change');
}
$('<select class="province" />').insertBefore('.province').change(function() { // insert select boxes beside hidden province inputs
$(this).siblings('input.province').val($(this).val()); // update hidden input with current value
});
$('.country').change(function() {
var $countrySel = $(this);
var $provSel = $countrySel.parent().parent().next().children('td').children('select.province');
var $provInput = $provSel.siblings('input.province');
var country = $countrySel.val();
var province = $provInput.val();
$provSel.empty();
if(country in cache) {
updateProvinceOptions($provSel, cache[country], province);
}
else {
$provSel.addClass('loading');
$.getJSON('/get-provinces.json', {'country':country}, function(provinces) {
$provSel.removeClass('loading');
cache[country] = provinces;
updateProvinceOptions($provSel, provinces, province);
});
}
}).trigger('change');
它甚至会缓存结果,这样如果您选择加拿大,然后选择美国,然后再次选择加拿大,它就不必再次访问服务器以获取加拿大省份列表。但是,我同时在页面上显示其中的 3 个。当页面第一次加载时,缓存中没有任何内容,因此所有 3 个 em 都访问服务器以获取省份列表,因为尚未返回任何 ajax 调用。
如果该国家/地区的 ajax 调用已经在进行中,是否有一种相对简单的方法告诉它“等待”?还是我应该打扰?
【问题讨论】:
标签: jquery ajax synchronization