2013-01-07 34 views
1

我與Extjs4.1 MVC工作。我想要做的是將一些數據保存到服務器,但我不知道適當的格式或我應該如何提交數據到服務器。 這是我在想什麼,但我不相信Ajax調用應該在控制器,它應該是在模型或存儲文件?Extjs4 MVC保存項目服務器

方法在我的控制器:

submit: function(value) { 
    data = {"id": 100, "tdt": "rTk", "val": "445"} // test data 
    Ext.Ajax.request({ 
     url: 'http://test.myloc.com/providerSvc/dbproxy.php', 
     params: { 
      'do':'insert', 
      'object': 'stk', 
      'values': data 
     }, 
     success: function(response){ 
      alert('response.responseText); 
     } 
    }) 
    } 

我的店:

Ext.define('STK.store.Stack', { 
extend: 'Ext.data.Store', 
model: 'STK.model.Stack', 
autoLoad: true, 
proxy: { 
    type: 'ajax', 
    api: { 
      read: 'http://test.myLoc.com/providerSvc/dbproxy.php?do=get&object=stack' 
    }, 
    reader: { 
     type: 'json', 
     root: 'data', 
     successProperty: 'success' 
    }, 
    writer: { 
     type: 'json'    
    } 
} 
}); 

我的模型:

Ext.define('STK.model.Stack', { 
extend: 'Ext.data.Model', 
fields: ['id', 'tdt', 'val'] 
}); 

回答

1

store.sync()作品只有當GET和POST的端點是一樣的。

你可以做的是,爲GET, 通過連接到URL或創建類似

extraParams[urlKeys] = paramObject[urlKeys]; 
store.getProxy().setExtraParams(extraParams); 

那麼對象設置extraParams,

Store.getProxy().setUrl(StoreUrlForGET); 
Store.load({ 
callback : function(rec, operation, success) { 
if (success) {} 
else {} 
}); 

和POST寫一個AJAX請求爲,

Ext.Ajax.request({ 
url : StoreURLForPOST, 
method : 'POST', 
jsonData : Ext.JSON.encode(YourPostData), 
success : function(response, request) {}, 
failure : function(response, request) {} 
}); 

對於此AJAX請求,您可以,

Ext.Ajax.setDefaultHeaders({ 
"TokenId" : TokenValue 
}); 

所有這些代碼進入您的控制器。

+0

感謝,這正是我一直在尋找 – reagan

0

我想那是正確的地方,使Ajax調用。

您可以將它添加到存儲,然後調用「同步()」函數「保存」的一個記錄。

像這樣的東西(注意:未測試的代碼):

var store = Ext.create("STK.store.Stack"); 


    var record = Ext.create("STK.model.Stack"); 

    record.set(xvalues); 
    record.isDirty = true; 
    record.setDirty(true); // I don't know if this line is required 

    store.add(record); 


    store.sync({ 
     success: function(batch, options){ 

      alert("OK!")     

     }, 
     failure: function(batch, options){ 
      alert("failure!") 
     } 
    }); 
+0

是的,這是有道理的,但你怎麼發送數據到服務器來更新數據庫?請注意,我必須使用其他網址發佈: http://test.myLoc.com/providerSvc/dbproxy.php?do=insert&object=stack&values={data here}' – reagan

+0

那麼,這取決於什麼是「傾聽「在服務器上! ExtJS只是執行一個標準的HTTP方法(通常是一個POST)。 在您的服務器上,您必須有一些東西來處理該POST,例如PHP或ASP.NET等。 您可以使用Firefox或Chrome開發人員工具精確查看瀏覽器發送到服務器的內容。你會發現它只是純文本,具有一些特定的格式。服務器必須解釋該文本並對其進行處理。 – pvieira

+0

在我的情況下,它做=插入 – reagan