API解释说,您必须通过才能success: true
调用成功处理程序。这是该submit
方法的文档
@param {Object} options 传递给动作的选项(详见 Ext.form.Basic.submit 和 Ext.form.Basic.doAction )
if (form.isValid()) {
// Submit the Ajax request and handle the response
form.submit({
success: function(form, action) {
Ext.Msg.alert('Success', action.result.message);
},
// If you don't pass success:true, it will always go here
failure: function(form, action) {
Ext.Msg.alert('Failed', action.result ? action.result.message : 'No response');
}
});
}
如果您想使用不同的属性来指示错误,您应该查看http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.form.Basic-cfg-errorReader,您可以配置 errorReader 以根据需要读取您的属性。
您还可以将成功和失败处理程序都路由到同一个地方,并从处理程序中确定它
一定要设置standardSubmit:true
它不会被 AJAX 提交
让您的代码感觉不那么脏的示例解决方案
Ext.define('ns.my.CustomReader', {
extend: 'Ext.data.reader.Reader',
alias: 'reader.ns-customreader',
read: function(xhr)
var resp = Ext.JSON.decode(response.responseText, true);
// Handle the case where response is not JSON too (unhandled server errror?)
return {success: resp ? !!resp.id : false};
}
});
然后,当您创建表单时,您可以使用
form : {
errorReader: 'ns-customreader'
}
我还注意到您没有返回记录,读者应该根据文档执行此操作,可能只是您不需要它,但最好满足接口以使您的代码保持一致使用 Ext-JS
errorReader 不必是 Reader 的完整实现。它只需要实现一个 read(xhr) 函数,该函数在具有以下结构的对象中返回一个记录数组:
{ records: recordArray } // I think it needs success: boolean also.