【问题标题】:How to stop jQuery parser from converting array to object?如何阻止 jQuery 解析器将数组转换为对象?
【发布时间】:2017-08-16 19:16:37
【问题描述】:

我有一个 javascript 数据文件,如下所示:

data = { 
  items : [ 
   {name: 'ABC'}, 
   {name: 'CDF'} 
  ] 
}

当我将此数据传递给$.ajax(type: 'POST', data: data) 时,转换后的数据如下所示:

items[0][name]: 'ABC'
items[1][name]: 'CDF'

我的问题是我发送此数据的服务器将其解释为:

items: { 
  '0' : { 'name' : 'ABC' }, 
  '1' : { 'name' : 'CDF' }     
}

这里的问题是items 被视为一个对象,而不是一个数组! 那么如何确保$.ajaxitems 编码为数组而不是对象?谢谢,麻烦您了!

【问题讨论】:

  • 你也发送这个是什么服务器?看起来不像是js的问题,而且jQuery不会把数组转成对象
  • 查看转换后的数据。它是一个相对于 js 的数组。但是如果整数 0 是一个字符串 '0' 它可以很容易地被解释为一个对象。
  • 我查看了更多文档。将traditional 设置为true 也不起作用,因为该对象只是作为object 发送的。我想要将当前实现与传统的参数序列化结合起来。但目前可能无法实现。

标签: javascript jquery arrays ajax http-post


【解决方案1】:

之后你能做一点转换吗?

data = { 
  items : [ 
   {name: 'ABC'}, 
   {name: 'CDF'} 
  ] 
}

data.items=Object.keys(data.items).map(key=>data.items[key])

【讨论】:

  • 我希望我可以更改服务器解释数据的方式。但我不能。我必须确保我发送的数据是正确的。
  • 我看到你的格式是x-www-form-urlencoded,那你需要序列化数据,试试$.param(data)
【解决方案2】:

我相信

$.ajax({
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json'
})

应该做的伎俩

编辑添加了我在 cmets 中提到的错误遗漏的 contentType。

【讨论】:

  • 我确实有dataType: 'json',POST 通话。
  • 刚试过。添加 contentType 也会在此服务器上引发错误。我认为它期望数据的形式为'application/x-www-form-urlencoded; charset=UTF-8'
  • @Yathl 那么问题出在您的后端以及它如何解析请求数据。您需要使用您在后端使用的语言以及您尝试访问数据的方式来更新您的问题
  • 后端不受我控制,无法更改。它使用 Ruby on Rails。确切的前端使用的是 Ember。特别是 Ember jQuery。 emberjs.com/api/ember-data/2.14/classes/DS.Adapter/methods/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2011-01-14
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多