如何通过sencha商店发布数组

suo*_*123 2 arrays load extjs store

我创建了一个存储并使用一个数组使用一个数组启动它.当我执行load函数时,数组参数变为字符串'[object object]'

代码如下:

商店:

Ext.define('test.store.info',{
    extend: 'Ext.data.Store',
    config:{
        model:'test.model.info',
        proxy:{
            type:'ajax',
            url:'http://domain/path',
            actionMethods:'POST'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

模型:

Ext.define('test.model.info',{
    extend:'Ext.data.Model',
    config:{
        fields:[
            'code',
            'data'
        ]
    }
})
Run Code Online (Sandbox Code Playgroud)

在控制器中使用:

var store = Ext.getStore('info');
params = {
    t1:[{
        f1:'aa'
    },{
        f2:'bb'
    }],
    t2:'ddd'
}
console.log(params)
store.load({
    params:params
});
Run Code Online (Sandbox Code Playgroud)

或者我只是使用Ajax函数代替加载函数,结果是一样的.

  Ext.Ajax.request({
        url:'http://domain/path',
        method:'post',
        params:params,
    });
Run Code Online (Sandbox Code Playgroud)

我检查浏览器网络中的xhr,它是一个字符串如下:

t1:[object Object]
t1:[object Object]
t2:ddd
Run Code Online (Sandbox Code Playgroud)

当我检查服务器日志时,它显示:

t1:'[object Object]'
t1:'[object Object]'
t2:'ddd'
Run Code Online (Sandbox Code Playgroud)

suo*_*123 6

我找到了解决方案,谢谢

1,只需在Ajax中使用jsonData代替params,如下所示:

Ext.Ajax.request({
    url: ajmd.util.version.getHost()+'/archimedes/update/selfInfo',
    method:'post',
    // params:params,
    jsonData:params
});
Run Code Online (Sandbox Code Playgroud)

2,或者只是在发送之前编码数据

params.t1 = Ext.encode(params.t1);
Run Code Online (Sandbox Code Playgroud)