Sencha触摸对JSON的XML响应

时间:2011-11-24 14:44:02

标签: xml-parsing sencha-touch jsonp response json

我最近在Sencha中启动了一个现有Web服务项目。 作为这项技术的新手,我在完成某些功能方面遇到了一些问题。

问题 我必须调用登录服务,请求如下:

http://domain.sub.com/Service.asmx/LoginService?body={"Username":"maj@smaj.com","Password":"p12345","Token":122112321123212123,"Method":"Login","LabId":"(null)","Hash":"fr3f33f3334348u8yy8hfuhdu8bdy7y89u89x8998c89789c87d78r9","DeviceType":"iPhone Simulator","DeviceId":"91BF3299-A94C-5AD3-9C35-A5C9BBBB6AA8","ApplicationType":"iPhone","Id":"998390494"}

但响应以XML格式显示为: 的响应:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://domain2.sub2.com/MobileWebService/">{"Id":"null","Message":"Logged In.","Status":true,"LoggedIn":true}</string>

我必须将此xml解析为json,以便从响应中获取:{"Id":"null","Message":"Logged In.","Status":true,"LoggedIn":true}

然后使用Status,LoggedIn和Id来验证登录。

我的想法 我不确定它是否正确,我正在尝试创建两个商店,xmlStore和JsonStore。

...

  • 如何将xml响应存储在字符串中。
  • 我如何将此字符串传递给Json Store(在url的位置?)

我可能听起来很天真,但这是我的问题;)

请指导。

修改

我意识到我正在潜水跨域请求。 是什么导致问题或混乱。如何处理它假设我没有跨域请求?

1 个答案:

答案 0 :(得分:1)

如果您正在进行跨域请求,请在代理中使用scripttag代替ajax。这是一个json示例

离。

mApp.stores.onlineStore = new Ext.data.Store({
 model: 'XPosts',
 proxy: {
           type: 'scripttag',
           url : 'http://domain.com/data.json',
           reader: new Ext.data.JsonReader({
               root: 'pages'
           }),
            timeout: 3000,
        listeners: {
            exception:function () {
                console.log("onlineStore: failed");
            },
                success: function(){
                    console.log("onlineStore: success");
                }
            }
       },
    autoLoad: true
 });

离线商店:

mApp.stores.offlineStore = new Ext.data.Store({
    model: 'XPosts',
    proxy: {
        type: 'localstorage',
        id: 'appdata',
        reader: new Ext.data.JsonReader({
            root: 'pages'
        })
    },
    autoLoad: true
});

然后,在你的发布会上:

this.stores.onlineStore.addListener('load', function () {
       console.log("onlineStore: online");
       mApp.stores.offlineStore.proxy.clear();
        console.log("offlineStore: cleared");
        this.each(function (record) {
            console.log("offlineStore: adding record");
           mApp.stores.offlineStore.add(record.data)[0];
       });
       mApp.stores.offlineStore.sync();
        console.log("offlineStore: synced");
        mApp.stores.offlineStore.load();
    });
    this.stores.onlineStore.load();

预先警告可能会有一些错误!