我有几个选择,我使用JQuery Ajax填充。大多数加载正常。但有一个或两个这样的查询,在少数情况下会返回很多记录。我想知道是否我填充选择的方式是从客户端代码中最有效的方式。大多数*有效*方式填充选择与jquery ajax
我省略了一些东西,使代码更短。
$(function() {
FillAwcDll()
});
function FillAwcDll() {
FillSelect('poleDdl', 'WebService.asmx/Pole', params, false, null, false);
}
function ServiceCall(method, parameters, onSucess, onFailure) {
var parms = "{" + (($.isArray(parameters)) ? parameters.join(',') : parameters) + "}"; // to json
var timer = setTimeout(tooLong, 100000);
$.ajax({
type: "POST",
url: appRoot + "/services/" + method,
data: parms,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
clearTimeout(timer);
alert("success");
if (typeof onSucess == 'function' || typeof onSucess == 'object')
onSucess(msg.d);
},
error: function (msg, err) {
}
}
});
function FillSelect(sel, service, param, hasValue, prompt, propCase) {
var selectId = 'select#{0}'.format(sel);
if ($(selectId) == null) {
alert('Invalid FillSelect ID');
return;
}
$(selectId + ' option').remove();
$('<option class=\'loading\' value=\'\'>loading...</option>').appendTo(selectId);
ServiceCall(service,
param,
function (data, args) {
$(selectId + ' option').remove();
if (prompt != null && prompt.length > 0) {
$('<option class=\'selectPrompt\' value=\'\' selected>{0}</option>'.format(prompt)).appendTo(selectId);
}
$.each(data, (hasValue)
? function (i, v) {
$('<option value=\'{0}\'>{1}</option>'.format(v.Key, (propCase) ? v.Value.toProperCase() : v.Value)).appendTo(selectId);
}
: function (i, v) {
$('<option value=\'{0}\'>{1}</option>'.format(v, (propCase) ? v.toProperCase() : v)).appendTo(selectId);
})
},
FailedServiceCall);
}
String.prototype.format = function() {
var pattern = /\{\d+\}/g;
var args = arguments;
return this.replace(pattern, function (capture) { return args[capture.match(/\d+/)]; });
}
所以这只是循环,并填充选择。有一个更好的方法吗?请注意警报(“成功”)几乎立即发生火灾,所以数据快速恢复,但之后会挂起尝试填充选择。
更新:(3)这工作得很好。虽然有一些问题。我有onBlur(调用函数来重新加载选择),当onBlur被激活和选择重新加载,页面只需要加载,只要我必须停止它......不知道为什么?
ServiceCall(service,
param,
function (data, args) {
var $select = $(selectId);
var vSelect = '';
if (prompt != null && prompt.length > 0) {
vSelect += '<option class=\'selectPrompt\' value=\'\' selected>{0}</option>'.format(prompt);
}
if (hasValue) {
$.each(data, function (i, v) {
vSelect += '<option value=\'{0}\'>{1}</option>'.format(v.Key, (propCase) ? v.Value.toProperCase() : v.Value);
});
}
else {
$.each(data, function (i, v) {
vSelect += '<option value=\'{0}\'>{1}</option>'.format(v, (propCase) ? v.toProperCase() : v);
});
}
$select.html(vSelect);
delete vSelect;
delete data;
},
FailedServiceCall);
}
@kralco,是一个选项,格式为'VAL返回的数据:每行text'一个? – 2010-11-08 13:21:09
或'val:text''val:text' .. –
2010-11-08 13:29:44
@kralco,在您更新的示例中,您将在每个“选项+ =”中添加整个数据,而不仅仅是循环中的相关项。 – 2010-11-08 13:41:45