ExtJS 5中表单提交的XML响应出错

Error on XML response of a form submit in ExtJS 5

本文关键字:XML 响应 出错 表单提交 ExtJS      更新时间:2023-09-26

我目前正在将一个表单升级到ExtJS 5。它应该向以XML响应的Web服务发送请求。由于ExtJS默认使用JSON,因此我根据文档设置了一个自定义的errorReader:

errorReader: new Ext.data.XmlReader({
    record: 'error',
    success: '@success'
    }, [
        'id', 'msg'
    ]
)

服务器的原始响应为:

HTTP/1.0 200 OK
Content-Type: text/xml
Content-Length: 150
Expires: Mon, 20 Oct 2014 10:00:53 GMT
<?xml version="1.0" encoding="Windows-1252"?>
<message success="false"><errors><error><id>-1</id><msg>FieldMissing</msg></error></errors></message>

当收到回复时,我在我的页面上看到一个错误,如下所示(翻译自德语):

Error: Property "scheme" can not be obtained from an undefined or null referenced object
Row: 48503
Source: ext-all-debug.js

它发生在一个"extractData"函数中,该函数执行以下操作:

entityType = readOptions && readOptions.model ? Ext.data.schema.Schema.lookupEntity(readOptions.model) : me.getModel(),
schema = entityType.schema,

readOptions是未定义的,所以我也是。getModel()返回未定义,尽管我在errorReader中用id和msg定义了一个模型。则entityType未定义,导致上述错误。

我不明白,我做错了什么。请帮忙。提前感谢:)

最好的问题是我自己能回答的问题;)文档似乎是错误的,或者当前实现中存在错误。医生所说的,只是不起作用:

errorReader: new Ext.data.reader.Xml({
    record : 'field',
    success: '@success'
}, [
    'id', 'msg'
])

你必须明确地(不是匿名的)定义一个合适的模型:

Ext.define('Field', {
    extend: 'Ext.data.Model',
    fields: ['id', 'msg']
});

然后以的形式分配

errorReader: new Ext.data.reader.Xml({
    record : 'field',
    model: 'Field',
    success: '@success'
})

不过似乎还有另一个问题。。设置success属性根本不起作用!我可以写"foo",但它仍然默认为"success",这意味着它总是期望根的子级,而不是根的属性。