2013-01-07 3 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 одинаковы.

Что вы можете сделать, это для ГЭТ, установить extraParams путем конкатенации в URL или путем создания объекта как

extraParams[urlKeys] = paramObject[urlKeys]; 
store.getProxy().setExtraParams(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.

Вы можете «сохранить» одну запись, добавив ее в хранилище, а затем вызвав функцию «sync()».

Что-то вроде этого (остерегайтесь: код не тестировался):

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

Да, это имеет смысл, но как вы отправляете эти данные на сервер для обновления db? Обратите внимание, что я должен опубликовать другой URL-адрес: 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

В моем случае это do = insert – reagan

Смежные вопросы