JsonStore выбрасывает loadexception <i>в случайном порядке </i> - PullRequest
1 голос
/ 10 мая 2011

У меня следующая проблема: у меня есть 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}});

ComboBox:

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;
}

Данные Json по Fiddler

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

Теперь с задержкой в ​​7,5 секунд я получаю исключение на стороне клиента, когда данные должны поступить на клиент.Без задержки я получаю исключение наугад.Исключение составляют данные Json, но единственное описание, которое я получаю, это «Синтаксическая ошибка», которая бесполезна.

Я удалил страницу всего, кроме формы и хранилища / комбинированного списка, это все еще происходит.Как видите, я предоставляю фиктивные данные, поэтому к базе данных даже нет доступа.Это сводит меня с ума!

Я бы очень признателен за любую помощь, я работаю над этим и выключаю уже три дня!Для записи я использую Internet Explorer версии 8.0.7600.16385, но это также происходит в Chromium.

Обновление Ошибка не отображается в Firefox, поэтому я не могу использовать консоль.

Несколько параметров из исключения
limit: 25
query: ""
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 / ListTickets"

Если большеТребуются, пожалуйста, дайте мне знать.Я также добавил аргументы «args» в обработчик исключений и получил статус 200. Меня это все больше и больше удивляет ...

1 Ответ

1 голос
/ 10 мая 2011

Вместо того, чтобы поймать loadexception, поймайте более общее exception из магазина.loadexception устарело.В вашем exception обработчике, console.log его параметры и обновите ваш вопрос с содержанием.Это даст нам больше информации о том, почему DataProxy вызывает исключение.

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 и посмотрите, решит ли это это.

Если значение type равно response, а ваш HTTP-ответ не равен 400 или 500, то читатель определил, что ответ не соответствует формату, который он ищет (например, отсутствуетidProperty или successProperty, которые он хочет).

...