2011-04-14 3 views
1

Sencha Touch 응용 프로그램에서 작업 중이며 웹 서비스에서 데이터를 가져올 수 없습니다.Ext.data.JsonStore getCount()가 0 레코드를 반환합니다. 웹 서비스

다음 코드는 다른 사용자의 sencha's forums 페이지 4에서 작동했습니다. 웹 서비스 출력 json과 일치하도록이 코드를 수정했습니다.

var myStore = new Ext.data.JsonStore({ 
     id: 'Agents', 
     proxy: new Ext.data.HttpProxy({ 
      url: 'ws/Service.asmx/GetAgents' 
      ,method: 'post' 
      ,jsonData: {} 
      ,headers: { 'Content-Type': 'application/json; charset=utf-8;'} 
      ,reader:{root:'d', record:'rows'} 
     }), 
     totalProperty: 'd.totalRows', 
     idProperty: 'AgentID', 
     fields: ['AgentID', 'FirstName','LastName'], 
     autoLoad:'true', 
     listeners: { 
       beforeload: function(myStore, options) { 
        console.log('beforeload: myStore.count = ' + myStore.getCount()); 
        console.log(options); 
       }, 
       load: function(myStore, records, options) { 
        console.log('load: ' + myStore.getCount()); 
        console.log(records) 
        console.log(options); 
       }, 
       exception: function(misc) { 
        console.log('exception:'); 
        console.log(misc); 
       } 
      } 
}); 

파이어 버그 콘솔 출력 :

beforeload: myStore.count = 0 
load: 0 
[] 
true 

방화범이 JSON은 'WS/Service.asmx를가/GetAgents'에서 반환 확인은 다음과 같습니다 그러나

{"d":{"success":true,"totalRows":2,"rows":[{"AgentID":1,"FirstName":"Jelena","LastName":"Akerhus"},{"AgentID":2,"FirstName":"Londo","LastName":"Molari"}]}} 

, 나는 '의 mystore를 입력 할 때. getCount() '콘솔에 나는 0 개의 레코드를 얻는다. 여기

이 Service.asmx를위한 코드의 일부입니다

[System.Web.Script.Services.ScriptService] 
public class Service : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)] 
    public object GetAgents() 
    { 
     List<Agent> agents = new List<Agent>(); 
     agents.Add(new Agent(1, "Jelena", "Akerhus")); 
     agents.Add(new Agent(2, "Londo", "Molari")); 

     object data = new { success = true, totalRows = agents.Count, rows = agents }; 
     return data; 

    } 
} 

답변

0

이 나를 위해 일했다, 나는 별도로 모델을 등록하지만, 데이터 유형. JsonReader가있는 매장을 사용하고 추가 한 것들을 일부 삭제했습니다.이 기능이 도움이 되었기를 바랍니다.

 Ext.regModel('Agent', { 
     idProperty:'AgentID', 
     fields: [{name:'AgentID', type:'int'},{name:'FirstName', type:'string'},{name:'LastName', type:'string'}] 
     }); 

     var store = new Ext.data.Store({ 
     model : 'Agent', 
     proxy: 
     { 
      type:'ajax', 
      url:'test.json', 
      reader:{ 
      type:'json', 
      root:'d.rows', 
      totalProperty: 'd.totalRows' 
      } 
     }, 
     autoLoad:'true' 
     }); 

     var list = new Ext.List({ 
     fullscreen: true, 
     itemTpl : '{FirstName} {LastName}', 
     store: store 
     }); 
     list.show(); 
+0

감사합니다. 제안한 변경 사항을 추가했지만 여전히 myStore.getCount()에서 0을 얻습니다. 나는 당신의 제안과 제가 시도한 것들을 반영하여 질문을 업데이트 할 것입니다. –

+0

이러한 문제가 발생하면 디버깅 할 수 있고 확장되지 않은 주석 버전의 sencha를 사용합니다. 이 경우 JsonStore를 검색하고 읽기 방법에서 몇 가지 중단 점을 설정하고 단계별로 설정에서 올바르지 않은 부분을 볼 수 있습니다. – ballmw

+0

이것은 효과가있다! 필자는 웹 서비스가 데이터를 올바르게 반환해야하기 때문에 헤더 'Content-Type'을 다시 추가해야했습니다. –

관련 문제