2012-03-03 6 views
1

Я пытаюсь сделать хранилище EXT JSON для отправки данных с помощью JSON, однако он, похоже, не работает. Вот простой код:Ext.data.store POST данные в формате JSON issue

 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 «писатель», мои ожидания, что parameterswould будет отправить на сервер с помощью JSON. Однако он по-прежнему делать регулярные POST с следующим телом: test=test&page=1&start=0&limit=25

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

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

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

ответ

0

Переключить proxy на model.

E.g.

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' 
    }); 

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

2

proxy.read всегда использует Params, НЕ 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

как отправить в орган запроса хотя? Я видел ссылку, но не смог понять это? – Isaac

+0

Этот вопрос касается «данных POST-данных Ext.data.store в формате JSON», , поэтому используйте store.load ({params: {a: 1, b: 2}}) для отправки параметров как json – Song

+0

Похож на этого должен работать, не так ли? Но как бы вы различали действия, не определяя 'api'config как ' api: {create: 'server/jsonProxy.php? Action = create', read: undefined, update: 'server/jsonProxy.php? Action = update ', destroy:' server/jsonProxy.php? action = destroy '}, ' –

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