在 ExtJS 中提交响应有问题(在 JSON 中响应,但在某处输入了 HTML)
Posted
技术标签:
【中文标题】在 ExtJS 中提交响应有问题(在 JSON 中响应,但在某处输入了 HTML)【英文标题】:Have issue with response of submit in ExtJS (response in JSON but somewhere HTML entered) 【发布时间】:2012-03-31 18:45:47 【问题描述】:我收到了这样的回复:
"success":true,"errorCode":-1,"error":""
JSON 中没有 html,但 js 说它已输入:
uncaught exception: You're trying to decode an invalid JSON String: <pre>"success":true,"errorCode":-1,"error":""</pre>
代码: http://www.pasteall.org/30057/javascript
这个问题已经修复,当你上传一个文件时,ExtJS 提交无法处理 json 响应。如果你在 html 上制作并转换 violà 你得到了。
$this -> output -> set_content_type('text/html');
所有的问题
【问题讨论】:
伙计们让你快速了解它在调试器中的外观,所以你看不到服务器问题pasteall.org/pic/28472 拜托,至少尝试写出正确的英语。 “你”不是“你”的合适替代品。 对不起我的英语只是我的写作技巧对阅读障碍不好,请原谅我:) 没问题,这不是你的错,有那么多人写得实在是太粗心了,以至于让我很生气。 【参考方案1】:ExtJS API 文档中实际上记录了您所经历的行为(尽管相当隐蔽) - 请参阅Ext.form.Basic.hasUpload() 方法的描述。
简而言之,典型的 Ajax XMLHttpRequests
不会执行文件上传。它改为使用隐藏的iframe
元素。因此,引用 ExtJS 文档:
如果服务器使用 JSON 发送返回对象,那么 Content-Type 标头必须设置为“text/html”...
这正是您最终解决问题的方式 - 所以,这解释了为什么它确实有效。因此,它“不是错误,而是功能”。 :-D
【讨论】:
+1,在 IE11 中,返回 app/json 作为文件导入的响应,提示您将 JSON 保存为文件。设置为 text/html 使 Ext 行为正确。 FF/Chrome 都不关心它是 app/json 还是 text/html,它们的行为都是正确的。【参考方案2】:不看代码很难分析问题,所以如果你可以添加你的客户端代码片段,它可能会有所帮助。
反正结果好像是html格式返回的,即包含非json数据。检查为什么标签包含在结果中。
还要检查服务器页面的配置 - 应该正确配置它以返回 JSON 格式。
它还解释了为什么您的结果状态为成功。这是因为调用服务器操作成功,即结果返回客户端没有任何错误。
现在,服务器返回结果给客户端后,存储尝试操作结果数据,但没有成功,因为内容不是JSON格式。
【讨论】:
这几天我调查了类似的问题,所以我会通知你任何进展。【参考方案3】:命令Ext.JSON.decode('"success":true,"errorCode":-1,"error":""');
应该可以很好地解析 JSON 响应。
您确定错误与它所说的不完全一致吗?您的回复是否包含<pre>...</pre>
标记?
【讨论】:
当响应类型为 json(而不是服务器提供 100%)时,我可以给调试它的某处提供屏幕截图(而不是服务器提供 100%)【参考方案4】:我在插入文件字段时遇到了同样的问题。如果你删除它,它会起作用。问题不来自响应本身。您必须在服务器端管理上传文件。
在服务器和客户端之间,响应从 'json' 转换为 html 响应。
见Uploading images using Node.js, Express, and Mongoose
【讨论】:
以上是关于在 ExtJS 中提交响应有问题(在 JSON 中响应,但在某处输入了 HTML)的主要内容,如果未能解决你的问题,请参考以下文章
如何检查从服务器收到的响应是 html 还是 json 并在 extjs 中按名称查找 html 表单?