1

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

为了简化测试,我将参数硬编码到请求中。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"}

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

4

2 回答 2

4

根据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 正文看起来是正确的。

于 2011-01-14T22:43:35.707 回答
0

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

这并不能回答您的确切问题,我现在将讨论这个问题,但需要考虑一些问题。

于 2011-01-14T22:25:20.950 回答