将数组转换为Object - JQuery

时间:2014-05-08 09:01:07

标签: jquery

尝试在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(''));
});

1 个答案:

答案 0 :(得分:0)

您应该在返回值之前等待ajax请求,您可以通过设置async:false

在您的函数中实现promises对象或使用synchronuous ajax请求
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;
}
相关问题