2012-04-25 150 views
0

我想從這裏得到server.And JSON是Django的服務器視圖功能:爲什麼我無法從ExtJs4中的服務器獲取JSON?

def showChart(request): 
    data = [{"id":1, "name":"Tom", "email":"[email protected]"}, {"id":2, "name":"Bosh", "email":"[email protected]"}] 
    return HttpResponse(json.dumps(data), mimetype="application/json"); 

顯然,showChart()將返回一個JSON。

我的前端extjs4代碼:

Ext.onReady(function() { 
Ext.define('ProductionInfo', { 
    extend: 'Ext.data.Model', 
    fields: ['email', 'id', 'name'] 
}); 

var store_new = Ext.create('Ext.data.Store', { 
    model: 'ProductionInfo', 
    proxy: { 
     type: 'ajax', 
     url : 'http://localhost:8000/production_data', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

store_new.load(); 
alert(store_new.getCount()); 

});

但提示對話框顯示'0',而正確的答案是'2'。那麼爲什麼我無法從服務器獲取JSON? (我可以通過Chorme和Firefox中的GET請求獲得正確的JSON)

+2

這家店異步加載,所以還是加載時調用'getCount'方法(從而得到返回值爲0)。如果要執行加載完成後發生的某些邏輯,則需要將監聽器添加到(存儲的)「load」事件。 – Tommi 2012-04-25 08:46:18

+0

湯姆是正確的商店負載是異步的,也許這個答案會幫助你http://stackoverflow.com/questions/8367074/how-to-get-data-from-extjs-4-store/8376810#8376810 – nscrob 2012-04-25 09:00:48

+0

謝謝,湯姆和nscrob! 「商店負載是異步的」是關鍵。所以我把'alert(store_new.getCount());'在(商店的)加載事件中,它成功返回2。 – 2012-04-26 02:21:52

回答

0

您可以檢查我的示例:https://github.com/lucassus/extjs4-account-manager 它是rails應用程序,但json機制非常相似。

基本上,你必須定義與有效proxy模型:https://github.com/lucassus/extjs4-account-manager/blob/master/app/assets/javascripts/app/model/User.js
和商店,這將有model屬性:https://github.com/lucassus/extjs4-account-manager/blob/master/app/assets/javascripts/app/store/Users.js

+0

當我運行我的extjs4代碼時,服務器可以檢測到Ext的ajax請求。我的代碼基於extjs4官方文檔。 – 2012-04-25 08:47:53

+0

謝謝你luacassus! :) – 2012-04-26 02:22:07

相關問題