在 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 响应。

您确定错误与它所说的不完全一致吗?您的回复是否包含&lt;pre&gt;...&lt;/pre&gt; 标记?

【讨论】:

当响应类型为 json(而不是服务器提供 100%)时,我可以给调试它的某处提供屏幕截图(而不是服务器提供 100%)【参考方案4】:

我在插入文件字段时遇到了同样的问题。如果你删除它,它会起作用。问题不来自响应本身。您必须在服务器端管理上传文件。

在服务器和客户端之间,响应从 'json' 转换为 html 响应。

见Uploading images using Node.js, Express, and Mongoose

【讨论】:

以上是关于在 ExtJS 中提交响应有问题(在 JSON 中响应,但在某处输入了 HTML)的主要内容,如果未能解决你的问题,请参考以下文章

未调用 ExtJS 成功操作

ExtJs:从 Json 响应中填充 ComboBox

如何检查从服务器收到的响应是 html 还是 json 并在 extjs 中按名称查找 html 表单?

当 extjs 中有代理 ajax 调用时,如何从响应中获取内容类型?

在 ext js4 中访问 json 数据?

如何将空行添加到网格并填充列,然后在EXTJS中提交