Sencha Touch アプリケーションで作業していますが、Web サービスからデータを取得できません。
次のコードは、sencha のフォーラム4 ページの別のユーザーで機能しました。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 コンソール出力:
beforeload: myStore.count = 0
load: 0
[]
true
Firebug は、「ws/Service.asmx/GetAgents」から返された JSON が次のとおりであることを確認しています。
{"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;
}
}