DHTMLx框架问题:form.save()无法接收服务器返回的错误信息
解决DHTMLx Form无法获取服务器错误响应的问题
我来帮你搞定这个困扰——你遇到的问题主要出在服务端的语法细节和客户端事件的选择上,下面一步步调整就能解决:
1. 先修正服务端代码的问题
你代码里用了中文引号(‘msg’),这会导致PHP解析失败,服务器根本没正确设置错误属性。另外调整下响应的设置逻辑,确保错误标记生效:
$form = new FormConnector($conn); function beforeProcessing($action) { // 换成英文引号,设置自定义错误信息 $action->set_response_attribute('msg','Server error content'); // 标记请求无效,触发错误响应 $action->invalid(); } $form->event->attach("beforeProcessing","beforeProcessing");
2. 客户端选对事件并正确解析响应
你之前用的onAfterSave和onAfterUpdate都是成功回调,当服务器返回错误时,这些事件不会正确触发或者无法直接获取错误信息。正确的做法是用专门的onError事件:
推荐方案:使用onError事件
这个事件会在请求失败(包括服务端标记invalid的情况)时直接触发,能轻松拿到错误细节:
myForm.attachEvent("onError", function (type, name, details){ if (details && details.xml) { // 解析XML响应里的msg属性 var errorMsg = details.xml.getAttribute("msg"); log.msg("服务器错误:" + errorMsg); } else { log.msg("请求失败:" + details); } });
备选:修正onAfterSave的解析逻辑
如果你一定要用onAfterSave,得正确解析XML DOM对象(不是直接访问xml.msg):
myForm.attachEvent("onAfterSave", function (id, xml){ // 检查响应状态是否为错误 var isError = xml.getAttribute("status") === "error"; if (isError) { var errorMsg = xml.getAttribute("msg"); log.msg("服务器返回错误:" + errorMsg); } });
为什么原来的代码不生效?
- 语法错误:中文引号导致服务端没正确设置错误属性,客户端自然拿不到数据;
- 事件选错:
onAfterUpdate和onAfterSave是为成功场景设计的,错误响应不会触发它们的预期逻辑; - 解析方式错了:服务器返回的是XML格式的响应,不是JSON对象,不能直接用
xml.msg这种方式访问属性。
按上面的方案调整后,应该就能正常获取到服务器返回的错误文本了。
内容的提问来源于stack exchange,提问作者LeonidMew
相关产品推荐
相关产品推荐

