AJAX / JSON填充下拉列表

时间:2011-04-11 03:01:36

标签: jquery asp.net-ajax

我正在使用ASP.NET 3.5进行ajax调用以填充下拉列表作为级联下拉列表的一部分,并且它工作正常,我正在获得JSON格式的结果。但我没有运气填充下拉调用此功能:

$.fn.populateSelect = function(data)
{
     if( data.length > 0)
     {
          var dropDown = this;

          dropDown.empty().append('<option selected = "selected" value="0">(Select Item)</option>');
          $.each(data, function()
          {
                dropDown.append($("<option></option>").val(this.Key).text(this.Value));


          });

      }

}

总是在最后一行给出“对象不支持此属性或方法”。我从AJAX调用中获取的数据,这是一个C#序列化的KeyValuePairs列表,通常如下所示:

[{"Key":1,"Value":"Anchor Fixation"},{"Key":3,"Value":"Ankle Arthroplasty"},{"Key":19,"Value":"Disc Arthroplasty"},{"Key":20,"Value":"Elbow Arthroplasty, "},{"Key":23,"Value":"Fracture Fixation/ Bone Fixation"},{"Key":32,"Value":"Hip Arthroplasty,"},{"Key":38,"Value":"Knee Arthroplasty"},{"Key":55,"Value":"Radial Head Arthroplasty"},{"Key":59,"Value":"Screw/Rod/Wire/Pin"},{"Key":60,"Value":"Shoulder Arthroplasty"},{"Key":61,"Value":"Silastic Implant"},{"Key":65,"Value":"Spine fusion/fixation"},{"Key":74,"Value":"Wrist Arthroplasty"}]

我做错了什么?

2 个答案:

答案 0 :(得分:0)

更新了答案

<小时/> 如果它的ASP.NET 3.5那么响应肯定会包含在“d”中。所以尝试这样的事情。

$.fn.populateSelect = function (msg) {
    var data = msg.hasOwnProperty('d') ? msg.d : msg;
    if (data.length > 0) {
        var output = [];
        output.push('<option selected = "selected" value="0">(Select Item)</option>');
        $.each(data, function (idx, val) {
            output.push('<option value="' + val.Key + '">' + val.Value + '</option>');
        });
        $(this).html(output.join(''));
    }
}

this内更改了jQuery.each 这是更优化的。因为在您的方法中,您正在操纵DOM以添加每个option 现在,像这样称呼它

$(document).ready(function () {
    var values = [{ "Key": 1, "Value": "Anchor Fixation" }, { "Key": 3, "Value": "Ankle Arthroplasty" }, { "Key": 19, "Value": "Disc Arthroplasty"}];
    $("#myselect").populateSelect(values);
});

我不明白为什么这对你不起作用。 Click here to see the updated working example
这是浏览器特定的问题吗?

答案 1 :(得分:0)

使用像Firebug这样的调试工具并检查dropDown和'this'的成员变量,它会给你错误,因为你得到的错误是对象的成员变量是未知的。