【问题标题】:extjs - How to submit a form when the response is not json?extjs - 当响应不是 json 时如何提交表单?
【发布时间】:2013-12-27 18:53:56
【问题描述】:

我了解当我提交表单时,默认情况下,根据the documentationExtJs 会将响应解析为 JSON。

在我的例子中,服务器返回 HTML,我想在面板中显示。当我使用 getForm().submit() 提交 from 时,ExtJs 会抛出关于无效 JSON 的错误:

Ext.JSON.decode(): You're trying to decode an invalid JSON String

如何告诉 ExtJs 不要尝试解析响应?我可以使用response object 访问文本。

【问题讨论】:

  • 你不觉得AJAX会更适合这里吗?
  • 我可以将服务器的响应更改为{html: '<my html bribe>'}。但如果可以改变客户端,我更愿意。

标签: json forms extjs extjs4


【解决方案1】:

我不知道您是否正在寻找严格的 ExtJS 框架解决方案。但是,您似乎可以直接使用 xmlhttprequest 解决您的问题,因为您希望将html 直接返回到dom

var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET','/myPath/here',false);
xmlhttp.send();
var html = xmlhttp.responseText;
//assign value

【讨论】:

【解决方案2】:

Ext.form.Basic 配置中,您可以定义自己的readererrorReader

【讨论】:

  • 这并没有什么帮助,因为只有 ajax、array 和 xml 阅读器。没有什么比这更简单的了,而且我认为我还没有准备好编写自己的扩展程序Ext.data.reader.Html。我认为getForm().submit() 不是解决问题的正确方法。
【解决方案3】:

最后,我无法在 ExtJs 的form.submit() 上工作。我需要一个使用Ext 的实现。由于这是我的应用程序中的常见模式,因此有一个简短的简单解决方案很重要。

这是我最终找到的(我有一个包含表单的模态窗口):

var values = me.up('form').getValues(),
panel = Ext.create('My.view.MyPanel', {
    xtype: 'panel',
    loader: {
        url: Paths.ajax + 'sav_vpc/douane.php',
        method: 'get',
        params: values,
        autoLoad: true
    }
});
me.up('window').close()

me.up('form').getForm().submit() 解决方案相比,此解决方案还有另一个优势:

.getForm().submit() 是异步的,.getValues() 是同步的。因此,可以立即关闭窗口。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多