Передача данных полученных из 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:18. |