2011-04-14 1 views
1

Je travaille sur une application Sencha Touch et je ne peux pas obtenir de données de mon service Web.Ext.data.JsonStore getCount() renvoie 0 enregistrements web service

Le code suivant a fonctionné pour un autre utilisateur sur sencha's forums, page 4. Je l'ai modifié pour correspondre à ma sortie de services Web 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); 
       } 
      } 
}); 

Firebug Sortie de la console:

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

Firebug confirme le retour de JSON 'ws/Service.asmx/GetAgents' est:

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

Cependant, quand je tape « MyStore. getCount() 'dans la console, je reçois 0 enregistrements.

Voici la partie du code pour 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; 

    } 
} 

Répondre

0

Cela a fonctionné pour moi, je me suis inscrit le modèle séparément, mais avec les types de données. J'utilise un magasin avec un JsonReader, j'ai enlevé quelques-unes des choses supplémentaires que vous avez ajouté po Espérons que cela fonctionne pour vous ...

 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

Merci pour la réponse. J'ai ajouté les modifications que vous avez suggérées, mais je reçois toujours 0 à partir de myStore.getCount(). Je vais mettre à jour la question pour refléter vos suggestions et certaines des choses que j'ai essayées. –

+0

Lorsque j'ai ces problèmes, j'utilise la version débogable, non-minifiée, commentée de sencha. Dans ce cas, recherchez JsonStore et définissez des points de rupture dans les méthodes de lecture, passez en revue et observez ce qui ne va pas dans votre configuration. – ballmw

+0

Cela a fonctionné! J'ai dû ajouter les en-têtes Content-Type car il est nécessaire que mon service Web renvoie correctement les données. –