0

我有一个由另一个下拉列表的 onselect 触发的 AJAX 填充的下拉列表。这个 AJAX 调用一个返回字典的 web 服务,然后我在 jQuery 中迭代它以填充下拉列表。

我遇到的问题是,在 Chrome 中,下拉列表的顺序正确,但在 IE8 中,下拉列表的前两个选项位于错误的位置。

即,而不是下拉列表:

1
2
5
10

这是

5
10
1
2

以前有人遇到过这个吗?它是 IE 中的一个错误,还是它发生的原因背后有什么原因?迭代的对象的顺序正确,所以我不明白为什么它会首先用于第 3/4 个项目。

代码:

function changeProduct($tr) {
    var $product = $tr.find('select.product');
    var $version = $tr.find('select.version');
    var $quantity = $tr.find('input.quantity');
    var dataString = {
        sProductId: $product.val()
    };
    $.ajax({
        type: "POST",
        url: "http://site.com/services/calculator.asmx/getVersionOfProduct",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(dataString),
        dataType: "json",
        success: function(response) {
            var JSON = jQuery.parseJSON(response.d);
            emptyDropdown($version);
            $.each(JSON, function(key, value) {
                $version.append($('<option>').val(key).text(value));
            });
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
}

网络服务:

Dim dictProducts As IDictionary(Of String, String) = SmsCalculatorProductFunctions.getVersionsForProduct(sProductId)
Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
Dim sb As New StringBuilder
js.Serialize(dictProducts, sb)

Return sb.ToString()
4

1 回答 1

0

dictProducts很可能会被字符串化为一个对象。

我认为您应该使用数组,因为 js 对象没有排序。

请检查这个 SO 问题
是否 JavaScript 保证对象属性顺序?

于 2013-07-03T09:41:55.897 回答