2015-02-08 68 views
1

我是ExtJs的新手。我正在開發一個使用JSP的Web應用程序。在那裏,有一個servletShowProductInferenceServlet。當我使用AJAX調用訪問servlet時,它會很好地返回響應。這裏是使用jQueryAJAX呼叫。加載數據存儲Extjs動態指定代理

$.get("ShowProductInferenceServlet", { 
            levelFlag : levelFlag, 
            level1 : selectedCategory, 
            level2 : selectedSubCategory, 
            level3 : selectedProductName, 
            level4 : selectedMaxQty, 
           }, function(responseText){ 
            alert("Shown Inference : " + responseText); 
           }); 

既然servlet工作正常,我想用從servlet的響應來填充datastore。我爲datastore動態創建proxy,因爲有其他servlets使用相同的數據庫,如果我事先聲明proxydatastore,我遇到鎖定問題。這裏是我用於datastore的代碼。

var dataStorePrimaryInferences = Ext.create('Ext.data.Store', { 
     storeId : 'dataStorePrimaryInferences', 
     fields : [ 'code', 'text', 'confidence' ], 
     autoLoad : false, 
     proxy : { 
      listeners : { 
       exception : function(proxy, response, operation, eOpts) { 
        console.log('exception' + response.responseText); 
       } 
      } 
     }, 
    }); 

以下是動態分配proxy及相關細節的代碼。

dataStorePrimaryInferences.getProxy.type = 'ajax'; 
dataStorePrimaryInferences.getProxy.url = 'ShowProductInferenceServlet'; 
dataStorePrimaryInferences.getProxy().getReader().type = 'json'; 
dataStorePrimaryInferences.getProxy().getReader().root = 'result'; 
dataStorePrimaryInferences.getProxy().setExtraParam("levelFlag", levelFlag); 
dataStorePrimaryInferences.getProxy().setExtraParam("level1", selectedCategory); 
dataStorePrimaryInferences.getProxy().setExtraParam("level2", selectedSubCategory); 
dataStorePrimaryInferences.getProxy().setExtraParam("level3", selectedProductName); 
dataStorePrimaryInferences.getProxy().setExtraParam("level4", selectedMaxQty); 
dataStorePrimaryInferences.load(); 

當我運行該程序時,我在Web控制檯中出現此錯誤。

Uncaught TypeError: Cannot read property 'indexOf' of undefined 

錯誤的蹤跡似乎指向load()。有人能告訴我哪裏錯了嗎?

在此先感謝。

+0

你的json響應是什麼樣的? – mindparse 2015-02-08 13:56:55

+0

Plz檢查你得到的確切響應並用它更新你的文章 – 2015-02-08 19:01:20

+0

你能看到正在向ShowProductInferenceServlet發出的網絡請求嗎?另外,對於代理,您應該使用setUrl()而不是.url方式。 – mindparse 2015-02-09 10:22:57

回答

0

我想說這是因爲你設置代理的方式。也許你應該一氣呵成,像這樣:

dataStorePrimaryInferences.setProxy({ 
    type: 'ajax', 
    url: 'ShowProductInferenceServlet', 
    reader: 'json', 
    root: 'result', 
    extraParams: { 
     levelFlag: levelFlag, 
     level1: selectedCategory, 
     level2: selectedSubCategory, 
     level3: selectedProductName, 
     level4: selectedMaxQty 
    } 
});