【问题标题】:Sench Touch (Extjs) not POSTing nested JSON to Rails 3 app correctlySench Touch (Extjs) 没有正确地将嵌套的 JSON 发布到 Rails 3 应用程序
【发布时间】:2011-06-09 10:28:54
【问题描述】:

我正在尝试使用 Sencha Touch 创建一个表单,它将在一个简单的 Rails 3 应用程序中创建一个新任务。我本质上是将嵌套 JSON 添加到 this question

为了简化测试,我将参数硬编码到请求中。 Rails 应用程序是使用以下工具创建的:

$rails g scaffold task name:string

Sencha Touch Ajax 请求:

Ext.Ajax.request({
 url:'/tasks',
 method:'POST',
 params: { 
  task: { name: "Hello World" }
  }

Rails 期望 params 哈希看起来像这样:

Parameters: { "task"=>{"name"=>"Hello World"} }

但是来自 Sencha 的 Ajax POST 是这样发送的:

Parameters: {"task"=>"[object Object]"}

当我尝试使用 defaultHeaders 时:

Ext.Ajax.defaultHeaders = {
  'Content-Type': 'application/json'
}

它的帖子是这样的:

Parameters: {"_json"=>"task=%5Bobject%20Object%5D"}

关于如何正确处理此问题的任何想法?

【问题讨论】:

    标签: ruby-on-rails ajax extjs sencha-touch


    【解决方案1】:

    根据http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters,Rails 在使用 [...] 语法看到表单字段时会创建“嵌套”参数。

    Ext.Ajax.request({
        url:'/tasks',
        method:'POST',
        params: {
            'task[name]':'Hello World'
        }
    });
    

    我没有 Rails 服务器来测试它,但 POST 正文看起来差不多。

    【讨论】:

    • 好侦探詹姆斯,这是我没有追求的选择。谢谢!
    【解决方案2】:

    作为临时答案,您是否考虑过使用 Sencha Touch Ext.data.* 包?在那里,有一个 REST 代理,它将处理您的服务器和客户端应用程序之间的所有 CRUD 操作,并负责模型字段更新、验证、关联等

    这并不能回答您的确切问题,我现在会看一下,但需要考虑一下。

    【讨论】:

    • 嘿,James,我尝试使用 Ext.data.AjaxProxy 有一段时间,但运气不佳,因为似乎几乎每个使用示例都是 GET 请求而不是 POST。我确实尝试过自己解决问题,但一直遇到错误。我确实似乎 AjaxProxy 会是一个不错的选择,但如果我能找到更好的文档/示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多