我可以只使用一个请求来填充相同的 html 元素吗?
Can I use only one request to fill the same html element?
我正在使用 ajax 向网络服务发出请求。
$(document).ready(function(e) {
var token = "123";
$.ajax({
type: "POST", //REQUEST TYPE
dataType: "json", //RESPONSE TYPE
url: "http://ws/mehtod"+token,
success: function(data) {
console.log(data);
$.each(data, function(i) {
$('#list_countries').append("<option>" + data[i].Name + "</option>"); //fILL THE DDL. FOR EACH ITEM RETURNED ADD DATA[NAME] TO ONE LINE OF THE DDL.-
});
},
error: function(err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
}).always(function(jqXHR, textStatus) {
if (textStatus != "success") {
alert("Error: " + jqXHR.statusText);
}
})
});
问题是:我的 html 中有多个 ID 为 "list_countries" 的元素(它们都是相同的元素,但位于页面内的不同面板中)并且我的请求有效并很好地处理数据,但由于某种原因,它只填充了一个元素。其他人不填写请求的数据。这可能是什么原因?提前谢谢大家。
Try This:
$('#list_countries').each(function() {
$(this).append("<option>" + data[i].Name + "</option>");
});
很可能是因为您多次使用 标识符 #list_countries。最好使用 class 选择器或 unical ids:
$('#list_countries, #list_countries_2, #list_countries_3');
// or
$('.list_countries');
您正在使用的选择器告诉 jQuery 在内部使用本机 document.getElementById()
方法来获取 DOM wich returns 只有第一个节点 出现在与选择器匹配的页面中,而不考虑具有相同 ID
的任何其他节点。
因此,您必须强制 jQuery 到 不 使用本机 document.getElementById()
方法,这里有一个技巧:
$.each(data, function(i) {
$('body #list_countries').append("<option>" + data[i].Name + "</option>");
});
注意 #list_countries
之前的 body
,这里我们强制它使用 Sizzle 来完成这项工作,而不是 document.getElementById()
方法。
PS: 我强烈建议你对不同的元素使用相同的 class
而不是 ID
,它必须是唯一的页面。
我正在使用 ajax 向网络服务发出请求。
$(document).ready(function(e) {
var token = "123";
$.ajax({
type: "POST", //REQUEST TYPE
dataType: "json", //RESPONSE TYPE
url: "http://ws/mehtod"+token,
success: function(data) {
console.log(data);
$.each(data, function(i) {
$('#list_countries').append("<option>" + data[i].Name + "</option>"); //fILL THE DDL. FOR EACH ITEM RETURNED ADD DATA[NAME] TO ONE LINE OF THE DDL.-
});
},
error: function(err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
}).always(function(jqXHR, textStatus) {
if (textStatus != "success") {
alert("Error: " + jqXHR.statusText);
}
})
});
问题是:我的 html 中有多个 ID 为 "list_countries" 的元素(它们都是相同的元素,但位于页面内的不同面板中)并且我的请求有效并很好地处理数据,但由于某种原因,它只填充了一个元素。其他人不填写请求的数据。这可能是什么原因?提前谢谢大家。
Try This:
$('#list_countries').each(function() {
$(this).append("<option>" + data[i].Name + "</option>");
});
很可能是因为您多次使用 标识符 #list_countries。最好使用 class 选择器或 unical ids:
$('#list_countries, #list_countries_2, #list_countries_3');
// or
$('.list_countries');
您正在使用的选择器告诉 jQuery 在内部使用本机 document.getElementById()
方法来获取 DOM wich returns 只有第一个节点 出现在与选择器匹配的页面中,而不考虑具有相同 ID
的任何其他节点。
因此,您必须强制 jQuery 到 不 使用本机 document.getElementById()
方法,这里有一个技巧:
$.each(data, function(i) {
$('body #list_countries').append("<option>" + data[i].Name + "</option>");
});
注意 #list_countries
之前的 body
,这里我们强制它使用 Sizzle 来完成这项工作,而不是 document.getElementById()
方法。
PS: 我强烈建议你对不同的元素使用相同的 class
而不是 ID
,它必须是唯一的页面。