1

我有以下问题:我有一个填充组合框的 Ext.data.JsonStore。我有时会遇到负载异常。我可以一次又一次地刷新组合框,但迟早我会遇到异常。因此,为了检查超时问题,我在服务器上添加了一个延迟,现在我一直得到异常。编码:

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 数据,但我得到的唯一描述是“语法错误”,这没有帮助。

除了表单和存储/组合框之外,我已经剥离了页面的所有内容,它仍然会发生。如您所见,我提供了模拟数据,因此甚至无法访问数据库。这让我疯狂!

我真的很感激任何帮助,我已经断断续续地工作了三天!作为记录,我使用的是 Internet Explorer 版本 8.0.7600.16385,但它也发生在 Chromium 上。

更新 该错误未出现在 Firefox 中,因此我无法使用控制台。

异常限制中的一些参数
:25
查询:“”
开始: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

与其catch ,不如从 store中loadexception捕捉更通用的。已弃用。在您的处理程序中,它的参数并使用内容更新您的问题。这将为我们提供有关 DataProxy 抛出异常的原因的更多信息。exceptionloadexceptionexceptionconsole.log

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

exception事件参数的详细信息在DataProxy 事件文档中。

编辑:我在代码示例中输入了错误的参数,对不起!

检查type异常事件的参数。这是一个字符串,我的猜测是它的值是remote- 意味着你得到了一个有效的 HTTP 响应(代码 200,就像你说的那样),但是读者已经确定它包含来自服务器的错误。尝试添加"success": true到您的 JSON 响应中,看看是否可以解决它。

如果 is 的值type并且response您的 HTTP 响应不是 400 或 500,那么读者已经确定响应与它正在寻找的格式不匹配(例如,它缺少它想要的idPropertyor )。successProperty

于 2011-05-10T17:57:19.580 回答