【问题标题】:forge.request.ajax post data as jsonforge.request.ajax 将数据发布为 json
【发布时间】:2012-08-25 01:07:48
【问题描述】:

我已经开始使用 trigger.io 将我们的 jQuery 移动网络应用程序作为原生构建。当前形式的 Web 应用程序使用一个名为 janky.post 的插件来制作跨域帖子,以 json 格式提交数据 - 这是我们基于 PHP 的 API 所期望的。

我已经开始在本机构建中使用forge.request.ajax,它适用于应用程序中的所有表单,除了一个。该请求似乎不是作为 json 编码对象提交的,而是一个标准的 $_POST 数组。这不是什么大问题,因为我可以修改 API 来检测这一点,但是因为提交的数据是多维的,所以该方法似乎对数组进行了错误处理,因此它的结构不符合预期。

如何纠正这种行为以获得我想要的输出?无论如何,我是否可以强制为表单提交 json?如果是,这样做有什么缺点吗?它会阻止我以后在此表单提交中添加文件上传吗?

示例:

为了扩展我的意思,过程如下。提交时,控制器将表单数据格式化为 json 并将其传递给 ajax 方法,如下所示:

window.forge.ajax({
    type: 'POST',
    url: 'foo.com/bar',
    data: data,
    dataType: 'json',
    success: function( response ) {
        /* code omitted */
    });
});

之所以会这样,是因为帖子中的一些数据并非直接来自表单本身,而是由其他模型提供的。被发布的data的结构如下:

{
    id: '23',
    date: '2012-08-30 00:00:00',
    name: 'Foo',
    items: [{
        description: 'Bar',
        quantity: '1',
        price: '20'
    }]
}

但是当我们基于 PHP 的 API 将其作为数组接收时,结构如下:

array(
    'id' => '23'
    'date' => '2012-08-30 00:00:00',
    'name' => 'Foo',
    'items' => array(
        0 => array( 'description' => 'Bar' ),
        1 => array( 'quantity' => '1' ),
        2 => array( 'price' => '20' )
    )
)

如你所见,items数组中单个item对应的每个字段都被改成了自己的数组,这是错误的,应该是:

 items = array(
     0 => array(
         'description' => 'Bar',
         'quantity' => '1',
         'price' '20'
     )
 )

【问题讨论】:

  • 当我解释时我错了吗: items: [{ description: 'Bar', quantity: '1', price: '20' }] as...一个包含一个项目的数组?跨度>
  • 不,你是对的,这是一个包含一个项目的数组。同样明智的是,如果它有两个项目,那就是:items:[{description: 'Bar', quantity:'1', price:'20'}, {description: 'Hello', quantity:'2', price:'10'}]
  • Catalyst 中的“网络”选项是否提供了更多请求详细信息?
  • 在请求负载处通过 Catalyst 检查网络 urldecoded 时提交的数据如下所示:data[id]=23&data[date]=2012-08-30&data[name]=Foo&data[items][][description]=Bar&data[items][][quantity]=1&data[items][][price]=20 正如您所看到的项目,它为每个字段创建一个新的数组索引,而不是创建一个每个项目的新数组为:data[items][0][description]=Bar&data[items][0][quantity]=1&data[items][0][price]=20
  • 您似乎在我们对发布数据进行编码的方式中发现了一个错误,在我们修复它之前,一个简单的解决方法是将您的数据对象包装在 JSON.stringify 中,这意味着数据作为 JSON 字符串发送,而不是查询字符串编码(我认为这是您最初想要的)。

标签: ajax request trigger.io forge


【解决方案1】:

正如@Connorhd 所说,这是我们在数组中编码对象的方式中的一个错误:我现在已经修复 - 将在本周末部署。给您带来的不便敬请谅解!

【讨论】:

  • 没问题 James,感谢您的反馈和快速修复!很高兴为一个了不起的项目做出了一点贡献。有开源计划吗?
  • 是的:作为一家公司,我们首先需要构建一些其他服务和产品来保护我们自己,但我们正计划逐步开放更多源代码。
猜你喜欢
  • 2017-03-30
  • 2019-04-06
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2021-12-16
  • 2011-02-27
  • 2013-12-15
  • 1970-01-01
相关资源
最近更新 更多