extjs将ExtraParams发送到restapi的问题

时间:2019-04-25 20:04:37

标签: extjs

我有一个rest api,我想从extjs中读取。这些是其余api期望的参数:

params = {
   sort: 'idlevel', 
   filter: {
      active: true, 
      idup: {
        'null': 0
      }
   }
}

如您所见,它是一个非常简单的Javascript对象。这些参数就像使用Reactjs构建的另一个应用程序的魅力一样。从Extjs商店,我是这样从我的商店发送它们的:

...

 proxy: {
        type: 'ajax',

        headers: {
           'Accept': '*/*',
           'Cache-Control': 'no-cache',
           'Content-Type': 'application/json',
           'Authorization': localStorage.token
        },

        extraParams: {
          sort: 'idlevel', 
          filter: {
             active: true, 
             idup: {
               'null': 0
             }
          }
       }

   ...

问题是这将返回验证失败错误。当我进入浏览器的网络历史记录时,会看到以下查询字符串参数:

_dc: 1556221645266
filter: [object Object]
filter: true
sort: idlevel
page: 1
start: 0
limit: 25

我不知道为什么Extjs将extraParams中的javascript对象变成这个奇怪的东西。所以我的问题是:如何告诉Extjs以正确的方式假定这些参数?我在这里错过了一些琐碎的事情吗?

更新: 这是使用react时的查询字符串输出:

sort: idlevel
filter[active]: true

2 个答案:

答案 0 :(得分:1)

如果react中的查询字符串如下所示:

sort: idlevel
filter[active]: true

然后在extjs ajax代理中应该是:

    var myStore = Ext.create('Ext.data.Store', {
        autoLoad: true,
        fields: ['a'],
        noCache: true,
        remoteSort: false,
        remoteFilter: false,
        pageSize: 0,
        proxy: {
            url: "http://example.xyz",
            noCache: false,
            type: 'ajax',
            headers: {
                'Accept': '*/*',
                'Cache-Control': 'no-cache',
                'Content-Type': 'application/json',
                'Authorization': localStorage.token
            },
            extraParams: {
                sort: 'idlevel',
                'filter[active]': true
            }
        }
    });

答案 1 :(得分:0)

您正在通过url发送一个对象,该对象应该是纯文本,我的建议是在对象中使用JSON.stringify(),类似这样

    extraParams: {
      sort: 'idlevel', 
      filter: JSON.stringify({
         active: true, 
         idup: {
           'null': 0
         }
      })
   }

然后在后端,您可以再次在对象中转换字符串