Передача данных полученных из grid на сервер
Добрый день.
Возникла трудность с пониманием того, как передать данные store на сервер. Т.е. есть grid таблица куда загружаются данные из store. Я делаю какие-то изменения в таблице, и хочу отправить все данные из таблицы на сервер. Вопрос как передать эти данные? Верней вопрос как перевести объект store в нужный вид для отправки через ajax? В контроллере есть код:
init: function() {
this.control({
'viewport button': {
click: this.savedata
}
});
},
savedata: function(grid, record){
console.log('Save');
var vl_store = this.getGamesStore();
var vl_ajax = Ext.Ajax.request({
url: '/sport/jsontoserver.php',
method: 'post',
params: {
vl_store: vl_store
},
success: function(response){
var text = response.responseText;
}
});
}
|
|
В этом и вопрос был, как получить JSON строку из store, чтобы потом отправить её на сервер.
В принципе, придумал вот так сделать:
init: function() {
this.control({
'viewport button': {
click: this.savedata
}
});
},
savedata: function(){
var store = this.getGamesStore();
var store_count = store.data.length;
//формируем json строку
var json_to_server = '[';
store.each(function(item, index) {
//не ставим запятую, если элемент в массиве последний
json_to_server += index==store_count-1 ? Ext.encode(item.data) : Ext.encode(item.data) + ', ';
});
json_to_server += ']';
//vl_store.load(); // можно применить для первой загрузки данных в грид
var ajax = Ext.Ajax.request({
url: '/sport/jsontoserver.php',
method: 'post',
params: {'json' : json_to_server},
success: function(response){
var text = response.responseText;
}
});
}
Но кажется как-то громоздко. И думаю в ext как-то должно делаться это в одну пару строк. :) |
Если все данные пучком, то можно так
var data = [];
store.each(function(item) {
data.push(item.data);
)};
var json = Ext.encode(data);
Если по одному (к примеру, сразу после добавлении записи в таблицу), то вам стоит посмотреть Ext.data.DataWriter и его применение со Ext.data.Store (к примеру, JsonStore) |
Цитата:
Т.е. создается массив объектов, а потом он целиком енкодится в json строку. Я думал енкод нельзя применять к массиву объектов. Спасибо за совет, код упростился. |
Что мне в данном примере не нравится так это то, что это Array. И в месте с ним передаются и его функции. По-дефолту эта функция "remove" и с ней проблем не возникает. Но если добавить библиотеку Ext.ux.util.js, то в ней дополняются функции для Array и теперь и они тоже передаются на сервер. Проблема в том, что там в коде есть знак больше (<) на которую ASP.net ругается как попытку передать ему ява-скрипт. Хотя там и есть возможность отключить эту проверку, но естественно не желательно.
Поэтому я использую не массив, а объект. var data = {}; // - Object var i = 0; sm.each(function (item){ data[i++] = (Ext.encode({ ins: item.get('ИНС'), pa: item.get('ПА') })) }); |
| Часовой пояс GMT +3, время: 15:06. |