0
$.get("CallBack.aspx", { nm: StateTx, nm2: StateTx2 }, function(data) {
                    $.each(data, function() {
                        $('[id$=DropDown1]').append("<option value=" + this['I3D'] + ">" + this['prmv'] + "</option>");
                    });
                });

私の問題 ie8 最後の項目が未定義です。どのように修正しますか?

Amain cm2 = new Amain();
DataTable dt = cm2.Getdt(str, str3);
StringBuilder sb = new StringBuilder();
sb.Append("[");
foreach (DataRow item in dt.Rows)
{
    sb.Append("{");
    sb.Append("\"prmv\":\"");
    sb.Append(item[0].ToString());
    sb.Append("\"" + "},");
}

sb.Append("]");

Context.Response.ContentType = "application/json";
Context.Response.ContentEncoding = Encoding.UTF8;
Context.Response.Write(sb.ToString());
Context.Response.End();
4

1 に答える 1

1

これは、IE が Javascript 配列を処理する方法が原因で発生する可能性があります。IEでは、

var a = [1, 2, 3, 4,];

には 5 つの要素があり、最後の要素は未定義です。Firefox では、最後のカンマが無視されるため、リストには 4 つの要素があります。

Callback.aspx返されている正確なデータを見てください。

更新: コールバック コードは、次の行でこの問題を引き起こします。

                sb.Append("\"" + "},");

これにより、次のような配列が生成されます。

[{"prmv":"1"},{"prmv":"2"},{"prmv":"3"},{"prmv":"4"},]
                                                    ^ extra comma

]返される配列の前に余分なコンマがあります。これを修正する 1 つの方法は次のとおりです。

sb.Remove(sb.Length-1, 1); // remove extra trailing comma
sb.Append("]");

この修正は、IE と Firefox (および他のすべてのブラウザー) の両方で機能します。

于 2010-02-26T07:50:35.080 に答える