1

次の問題があります: コンボボックスに値を設定する Ext.data.JsonStore があります。時々 loadexception が発生します。コンボボックスを何度も更新できますが、遅かれ早かれ例外が発生します。したがって、タイムアウトの問題を確認するために、サーバーに遅延を追加したところ、常に例外が発生するようになりました。コード:

JsonStore:

var ticketStore = new Ext.data.JsonStore({
    url:'/Hour/ListTickets',
    autodestroy:true,
    totalProperty:'records',
    idProperty:'Id',
    root:'rows',
    fields:[{name:'Id'},{name:'Titel'}]
});
ticketStore.on({'loadexception':{fn:storeLoadException,scope:this}});

コンボボックス:

var ticketCombo = new Ext.form.ComboBox(
            {
                fieldLabel:'Ticket',
                hiddenName:'TicketId',
                store:ticketStore,
                width:300,
                valueField:'Id',
                minChars:2,
                displayField:'Titel',
                typeAhead:false,
                forceSelection:true,
                pageSize:25,
                triggerAction:'all',
                emptyText:'Selecteer een waarde...',
                selectOnFocus:true,
                valueNotFoundText:"nitchevo",
                value:1567,
                allowBlank: false
            }
        );

データ:

    try
    {
        IList<Dictionary<string, object>> returnValue = new List<Dictionary<string, object>>();

        returnValue.Add(new Dictionary<string, object>{ {"Id", 1}, {"Titel", "IkBenTitel"}});
        System.Threading.Thread.Sleep(7500);

        return returnValue;

    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }

データから Json への変換

public static JsonResult JSon(this IList<Dictionary<string, object>> list)
{
    var jsonData = new
    {
        records = list.Count,
        rows = list.ToArray()
    };
    JsonResult json = JsonHelper.Json(jsonData);
    return json;
}

Fiddler による Json データ

{"records":1,"rows":[{"Id":1,"Titel":"IkBenTitel"}]}

7.5 秒の遅延により、データがクライアントに到着するはずのときにクライアント側で例外が発生します。遅延がなければ、ランダムに例外が発生します。例外にはJsonデータが表示されますが、表示される唯一の説明は「構文エラー」であり、役に立ちません。

フォームとストア/コンボボックスを除くすべてのページを削除しましたが、それでも発生します。ご覧のとおり、モック データを提供しているため、データベースにはアクセスすることさえできません。それは私を夢中にさせています!

助けていただければ本当にありがたいです。私はこれに 3 日間ほど取り組んでいます。記録のために、私は Internet Explorer バージョン 8.0.7600.16385 を使用していますが、Chromium でも発生します。

更新 Firefox ではバグが表示されないため、コンソールを使用できません。

例外
制限からのいくつかのパラメーター: 25
クエリ: ""
start: 0
reader.ef.length: 2
jsonData.rows[0].Id: 1
jsonData.rows[0].Titel: "IkBentitel"
reader.meta.fields [0].name: "Id"
reader.meta.fields[1].name: "Titel"
reader.meta.idProperty: "Id"
reader.meta.totalProperty: "records"
reader.meta.url "/Hour/リストチケット」

さらに必要な場合はお知らせください。また、例外ハンドラに 'args' を追加しましたが、ステータスは 200 です。

4

1 に答える 1

1

をキャッチする代わりに、ストアからloadexceptionより一般的なものをキャッチします。廃止されました。ハンドラーで、そのパラメーターと内容で質問を更新します。これにより、DataProxy が例外をスローしている理由に関する詳細情報が得られます。exceptionloadexceptionexceptionconsole.log

ticketStore.on('exception', function(proxy, type, action, options, response, args) {
    console.log(proxy, type, action, options, response, args);
});

イベント パラメータの詳細についてはexceptionDataProxy イベント ドキュメントを参照してください。

編集:コードサンプルに間違った引数を入れました。申し訳ありません!

type例外イベントのパラメータを確認してください。それは文字列であり、その値は有効であると推測されますremote-つまり、有効なHTTP応答(コード200、あなたが言ったように)を取得しましたが、リーダーはサーバーからのエラーが含まれていると判断しました。"success": trueJSON 応答に 追加してみて、問題が解決するかどうかを確認してください。

の値がtyperesponseあり、HTTP 応答が 400 または 500 でない場合、リーダーは、応答が探している形式と一致しないと判断しました (たとえば、必要なidPropertyまたはsuccessPropertyが欠落しています)。

于 2011-05-10T17:57:19.580 に答える