我尝试使用extjs发布表单。我有需要作为json数组发送的标记字段。这是一个标记字段:
{
xtype: 'tagfield',
fieldLabel: 'Product(s)',
name: 'productIds',
store: {
type: 'products'
},
valueField: 'productId',
displayField: 'productName',
encodeSubmitValue: true //this is supposed to send an array per https://docs.sencha.com/extjs/6.0/6.0.0-classic/#!/api/Ext.form.field.Tag-cfg-encodeSubmitValue
}
这是Ajax提交:
Ext.Ajax.request({
url: 'api/events/create',
method:'POST',
headers: { 'Content-Type': 'application/json' },
params : Ext.JSON.encode(form.getValues()),
success: function(form, action) {
Ext.Msg.alert('Success', action.result);
},
failure: function(form, action) {
//console.log(form.getForm().getValues());
Ext.Msg.alert('Submission failed.', 'Please make sure you selected an item for each required field.', action.result);
}
});
JSON有效负载最终看起来像这样:
{" productIds":" [1,2]" }
上述数组无法从字符串中反序列化(后端使用Jackson进行反序列化)。
有谁知道如何将上述内容发送为{ "productIds": [1,2] }
?
答案 0 :(得分:4)
因此,当我删除complicated_process_with_many_methods
时,它会自动将tagfield作为数组发送而不带引号。不管怎样,谢谢你的想法!
这里是没有encodeSubmitValue的标记字段:
encodeSubmitValue
答案 1 :(得分:0)
正如您通过执行Ext.JSON.encode({products: [1,2]});
所看到的那样,encode
函数未添加双引号。问题是Ext概念使每个表单字段与旧的HTML表单兼容,因此返回一个字符串。如果覆盖getValue()
(或可能getRawValue()
)函数,则可以返回实际数组。