Sencha touch XML 对 JSON 的响应

Posted

技术标签:

【中文标题】Sencha touch XML 对 JSON 的响应【英文标题】:Sencha touch XML response to JSON 【发布时间】:2011-11-24 14:44:01 【问题描述】:

我最近在 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】:

如果您正在执行跨域请求,请在您的代理中使用 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();

可能有一些错误,所以事先警告!

【讨论】:

以上是关于Sencha touch XML 对 JSON 的响应的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch 和 WordPress BuddyPress API 之间的 JSON 解析问题

Sencha Touch ResumeEvents 是一场灾难

Sencha Touch JSON 格式?

Sencha Touch Nestedlist JSON 格式示例

Sencha Touch 不显示 XML 数据

Sencha Touch 读取远程 XML 数据