Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2011, 14:09
Новичок на форуме
Отправить личное сообщение для xalt Посмотреть профиль Найти все сообщения от xalt
 
Регистрация: 26.08.2011
Сообщений: 3

Передача данных полученных из 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;
                }
            });

    }
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2011, 14:48
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

http://ru.wikipedia.org/wiki/JSON
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2011, 01:50
Новичок на форуме
Отправить личное сообщение для xalt Посмотреть профиль Найти все сообщения от xalt
 
Регистрация: 26.08.2011
Сообщений: 3

В этом и вопрос был, как получить 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 как-то должно делаться это в одну пару строк.
Ответить с цитированием
  #4 (permalink)  
Старый 02.09.2011, 10:03
Новичок на форуме
Отправить личное сообщение для likhter Посмотреть профиль Найти все сообщения от likhter
 
Регистрация: 04.05.2011
Сообщений: 1

Если все данные пучком, то можно так
var data = [];
store.each(function(item) {
  data.push(item.data);
)};
var json = Ext.encode(data);


Если по одному (к примеру, сразу после добавлении записи в таблицу), то вам стоит посмотреть Ext.data.DataWriter и его применение со Ext.data.Store (к примеру, JsonStore)

Последний раз редактировалось likhter, 02.09.2011 в 10:06.
Ответить с цитированием
  #5 (permalink)  
Старый 02.09.2011, 12:12
Новичок на форуме
Отправить личное сообщение для xalt Посмотреть профиль Найти все сообщения от xalt
 
Регистрация: 26.08.2011
Сообщений: 3

Сообщение от likhter Посмотреть сообщение
Если все данные пучком, то можно так
var data = [];
store.each(function(item) {
  data.push(item.data);
)};
var json = Ext.encode(data);


Если по одному (к примеру, сразу после добавлении записи в таблицу), то вам стоит посмотреть Ext.data.DataWriter и его применение со Ext.data.Store (к примеру, JsonStore)
Да, такой вариант подходит.
Т.е. создается массив объектов, а потом он целиком енкодится в json строку. Я думал енкод нельзя применять к массиву объектов.
Спасибо за совет, код упростился.
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2011, 10:41
Новичок на форуме
Отправить личное сообщение для freeExec Посмотреть профиль Найти все сообщения от freeExec
 
Регистрация: 22.09.2011
Сообщений: 1

Что мне в данном примере не нравится так это то, что это 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('ПА')
}))
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача запроса на сервер. Что на н11м? 0931454574 AJAX и COMET 9 16.03.2011 19:23
передача JSON на сервер mikeles AJAX и COMET 0 04.03.2011 11:28
Передача данных в IFRAME (по аналогии TinyMCE) PashaTurok Events/DOM/Window 12 01.01.2011 21:55
формирую форму из данных полученных AJAx belbek AJAX и COMET 5 26.06.2009 15:01
передача данных между формами Yurii Общие вопросы Javascript 2 30.04.2008 20:52