如何通过POST请求加载存储

时间:2015-01-16 00:52:43

标签: extjs cross-domain

我需要通过跨域POST请求加载存储

Ext.define('MyDesktop.desktop.store.DesktopShortcutStore', {


  extend: 'Ext.data.Store',


  requires: [
    'MyDesktop.desktop.model.DesktopShortcutModel'
  ],


  constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
      storeId: 'DesktopShortcutStore',
      model: 'MyDesktop.desktop.model.DesktopShortcutModel',
      autoLoad: false,
      proxy: {
        type: 'ajax',
        url: getApiUrl() + 'account/desktop-shortcuts-list',
        cors: true,
        reader: {
          type: 'json',
          rootProperty: 'items',
          successProperty: 'success'
        },
        paramsAsJson: true,
        actionMethods: {
          read: 'POST'
        },
        extraParams: {
          fff: 'zzz'
        }
      }
    }, cfg)]);
  }


});

但我有没有“fff”参数的OPTIONS请求。

通过jQuery跨域工作正常。

使用

Ext.Ajax.useDefaultXhrHeader = false;
Ext.Ajax.cors = true;

没有帮助。

我在文档中找不到任何信息。

1 个答案:

答案 0 :(得分:0)

这应该是最简单的解决方案。通过代理和POST直接加载商店可能需要一些覆盖,不确定它是否值得付出努力(需要更多调查)。

var store = ...;

Ext.Ajax.request({
    method: 'POST',
    url: '...',
    withCredentials: true, // for identity cookies
    success: function(response) {
        // given json array is returned
        var data = Ext.decode(response.responseText);

        Ext.each(data, function(r) {
            store.add(r);
        });
    }
});