尝试在PageLoad之后将对象列表绑定到下拉列表。 第2步工作正常,我得到数据。 我陷入了第1步和第3步。
sCountry是下拉列表的ID。
假设步骤3是正确的,那么现在应该在步骤1的“成功”部分做什么。
步骤1 - JS://将数据存储在全局对象中,以便可以多次检索它。
var GlobalObjects = { Countries: null,
GetCountries: function () {
if (GlobalObjects.Countries == null) {
$.ajax({
type: "POST",
url: "default.aspx/CountriesData",
data: "{}",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (res) {
//What should be done here
},
failure: function (res) {
alert(res.message);
}
});
}
return GlobalObjects.Countries;
}
};
第2步 - CS://获取数据
[WebMethod]
public static CountryDAL[] CountriesData()
{
CountryDAL cDAL = new CountryDAL();
DataTable dt = cDAL.getdata();
List<CountryDAL> lst = new List<CountryDAL>();
foreach (DataRow dr in dt.Rows)
{
CountryDAL obj = new CountryDAL();
obj.CountryId = Convert.ToInt32(dr["CountryId"]);
obj.CountryName = Convert.ToString(dr["CountryName"]);
lst.Add(obj);
}
return lst.ToArray();
}
第3步 - JS://在页面加载时将记录绑定到下拉列表
$(document).ready(function () {
//Load Countries
var opt = [];
opt.push("<option value='0'>--Select--</option>");
$(GlobalObjects.GetCountries()).each(function (key, value) {
opt.push("<option value=" + value.CountryId + ">" + value.CountryName +
"</option>");
});
$("#sCountry").html(opt.join(''));
});
答案 0 :(得分:0)
您应该在返回值之前等待ajax请求,您可以通过设置async:false
GetCountries: function () {
if (GlobalObjects.Countries == null) {
$.ajax({
type: "POST",
async: false, // async is true by default
url: "default.aspx/CountriesData",
data: "{}",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (res) {
GlobalObjects.Countries = res;
},
failure: function (res) {
alert(res.message);
}
});
}
return GlobalObjects.Countries;
}