Ext.data.store POST-данные в формате JSON - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь сделать EXT JSON store для отправки данных с использованием JSON, но, похоже, это не работает. Вот простой код:

       var myStore = new Ext.data.Store({
    //model: 'User',
    proxy: {
        type: 'ajax',
        url: '/users.svc',
        reader: {
            type: 'json',
            root: 'users'
        },
        writer: {
            type: 'json',
            root: 'data'
        },
        actionMethods: {
            create: 'POST', read: 'POST', update: 'POST', destroy: 'POST'
        },
        extraParams: { test: 'test' }
    },
        listeners: {
            beforeload: function (store, operation, options) {
                //alert(operation.params);
            }
        },
    autoLoad: true
});

Поскольку я определил JSON "писатель", я ожидал, что параметры будут отправлены на сервер с использованием JSON. Однако он все еще делает обычный POST со следующим телом: test=test&page=1&start=0&limit=25

Хотя я ожидаю, что POST должен иметь следующее тело: {test:'test',page:1,start:0}

Буду признателен за любую помощь

P.S. Я использую EXTJS 4.0.7

Ответы [ 2 ]

2 голосов
/ 13 апреля 2013

proxy.read всегда использует параметры, а не jsonData, поэтому store.load не может публиковать json

http://ahlearns.wordpress.com/2012/08/16/ext-js-4-load-a-data-store-using-json-params/

Ext.define('Ext.ux.data.proxy.JsonAjaxProxy', {
extend:'Ext.data.proxy.Ajax',
alias:'proxy.jsonajax',

actionMethods : {
    create: "POST",
    read: "POST",
    update: "POST",
    destroy: "POST"
},

buildRequest:function (operation) {
    var request = this.callParent(arguments);

        // For documentation on jsonData see Ext.Ajax.request
        request.jsonData = request.params;
        request.params = {};

        return request;
},

/*
 * @override
 * Inherit docs. We don't apply any encoding here because
 * all of the direct requests go out as jsonData
 */
applyEncoding: function(value){
    return value;
}

});

Надеюсь, это поможет!

0 голосов
/ 03 марта 2012

Сдвиньте определение proxy на model.

Например,

Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'email'],
proxy: {
    type: 'ajax',
    url: '/users.svc',
    reader: {
        type: 'json',
        root: 'users'
    },
    writer: {
        type: 'json',
        root: 'data'
    },
    actionMethods: {
        create: 'POST', read: 'POST', update: 'POST', destroy: 'POST'
    },
    extraParams: { test: 'test' }
}
});

Затем настройте магазин следующим образом:

 var myStore = new Ext.data.Store({
   model: 'User'
   });

Магазин будетиспользуйте прокси, указанный в модели.Надеюсь, это поможет!

...