2011-05-10 8 views
1

다음과 같은 문제가 있습니다. 저는 Ext.data.JsonStore에 콤보 박스를 채 웁니다. 로드 결과 가끔이 발생합니다. 시간이 지나면 콤보 상자를 새로 고칠 수는 있지만 조만간 예외가 발생합니다. 따라서 시간 제한 문제를 확인하기 위해 서버에 지연 시간을 추가 했으므로 이제는 항상 예외가 발생합니다. 코드 :JsonStore가 무작위로 <i>을 던졌습니다.</i>

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; 
} 
데이터가 클라이언트에 도착하는데 때
{"records":1,"rows":[{"Id":1,"Titel":"IkBenTitel"}]} 

피들러

따른

json으로 데이터는하기와 7.5 초 I 예외 클라이언트 측 얻을 지연. 지연없이 나는 예외를 무작위로 얻는다. 예외는 Json 데이터를 보지만 내가 얻는 유일한 설명은 도움이되지 않는 '구문 오류'입니다.

나는 폼과 상점/콤보 박스를 제외한 모든 페이지를 삭제했지만, 여전히 발생합니다. 보시다시피 데이터베이스에 액세스하지 못하도록 모의 데이터를 제공합니다. 그것은 나를 미쳤다!

나는 정말 도움을 주셔서 감사 드리며, 나는 3 일 동안 계속 노력하고 있습니다. 기록을 위해 Internet Explorer 버전 8.0.7600.16385를 사용하지만 Chromium에서도 마찬가지입니다.

업데이트 버그가 Firefox에 표시되지 않아 콘솔을 사용할 수 없습니다.

예외에서 몇 PARAMS
한계 : 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 : "r ecords "
reader.meta.url"/ Hour/ListTickets "

이상이 필요하면 알려주십시오. 나는 또한 예외 처리기에 'args'를 추가했으며 상태는 200입니다. 그것은 나를 점점 더 수수께끼로 만듭니다.

답변

1

loadexception을 잡는 대신 상점에서 더 일반적인 exception을 잡습니다. loadexception은 더 이상 사용되지 않습니다. exception 처리기에서 console.log 매개 변수를 사용하고 질문에 내용을 업데이트하십시오. 그러면 DataProxy가 예외를 던지는 이유에 대한 자세한 정보를 얻을 수 있습니다.exception 이벤트 PARAMS에

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

세부 사항은 DataProxy event docs에 있습니다.

편집 : 내 코드 샘플에 잘못된 인수를 넣어, 죄송합니다!

예외 이벤트의 type 매개 변수를 점검하십시오. 그것은 문자열이고 내 생각에 그 값은 remote입니다 - 유효한 HTTP 응답 (코드 200, 당신이 말했듯이)을 가졌음을 의미하지만 독자는 서버에 오류가 있음을 확인했습니다. "success": true을 JSON 응답에 추가하여 문제가 해결되는지 확인하십시오. type의 값이 response이며, 당신의 HTTP 응답이 400 또는 500이 아닌 경우

후 독자는 응답이 (예는 idProperty 또는 successProperty이 있음을 실종을 찾고 형식과 일치하지 않는 것으로 결정했다 싶어).

+0

예외 처리기에 'args'를 추가했는데 상태는 200입니다. Firefox를 사용할 때 예외가 발생하지 않으며 완벽하게 작동합니다. – Paul77