2012-01-23 37 views
2

我已經配置ExtJS的商店從useragentstring.com API的加載數據,該API返回的數據像這樣如何配置extjs讀取器來讀取此json?

{"agent_type":"Browser","agent_name":"Opera","agent_version":"9.70","os_type":"Linux","os_name":"Linux","os_versionName":"","os_versionNumber":"","os_producer":"","os_producerURL":"","linux_distibution":"Null","agent_language":"English - United States","agent_languageTag":"en-us"} 

Ext.define('Oms.model.Userinfo', { 
    extend : 'Ext.data.Model', 
    fields : ['agent_type', 'agent_name', 'agent_version', 'os_type', 'os_name'] 
}); 

Ext.define('Oms.store.Userinfo', { 
    extend  : 'Ext.data.Store', 
    model  : 'Oms.model.Userinfo', 
    proxy: { 
     type : 'jsonp', 
     reader : { 
      type: 'json', 
      root: '' 
     }  
    } 
}); 

這家店拋出一個錯誤

enter image description here

也許這會發生,因爲有在這個JSON沒有根?

任何想法如何讀取此輸出並正確加載存儲?

問候

回答

5

這對我的作品的時候,不設置root或當我將它設置爲undefined

您還可以擴展Ext.data.reader.Json以調整對您需求的響應。例如:

Ext.define('Ext.data.reader.JsonPWithoutRoot', { 
    extend: 'Ext.data.reader.Json', 
    read: function(response) { 
     return this.callParent([ { root: response } ]); 
    }, 
    root: 'root' 
}); 

然後在代理定義它是這樣的:

proxy: { 
    type: 'jsonp', 
    callbackKey: 'method', 
    url: 'http://localhost/ext4/data3.php', 
    reader: Ext.create('Ext.data.reader.JsonPWithoutRoot', {}) 
} 
+0

仍然拋出該錯誤可能在jsonp代理中的問題? –

+0

事實證明,對於JsonP的'read'方法''response'是不同的,所以我糾正了我的答案。 – Krzysztof

-1

您需要調整返回給看起來更像你的JSON對象:

{ 
    root: {  
     "agent_type":"Browser", 
     "agent_name":"Opera", 
     "agent_version":"9.70", 
     "os_type":"Linux", 
     "os_name":"Linux", 
     "os_versionName":"", 
     "os_versionNumber":"", 
     "os_producer":"", 
     "os_producerURL":"", 
     "linux_distibution":"Null", 
     "agent_language":"English - United States", 
     "agent_languageTag":"en-us" 
    } 
} 

當你定義你的JsonReader的根,你告訴讀者它應該看的對象在哪裏。這樣做是爲了讓您可以在同一請求中針對不同的商店返回JSON內的多個對象。

作爲一個附註,您可能想要觀察您如何處理PHP中的Null值......您可能會發現您需要處理從後端替換「Null」,因爲我相信ExtJS會將「Null」視爲一個字符串。

+0

問題是我無法控制即時消息接收的json結構。它是一個來自不同網站的api,它給json –

+1

給LoLo的答案一槍。 –