jQuery不会正确地将包含数组的JSON作为其属性之一发布

时间:2017-09-26 20:45:36

标签: javascript jquery arrays json

我正在尝试使用jQuery向我的API端点发送一个JSON对象,该对象有一个数组作为其属性之一。我已经定义了这样:

let bidding = {
  "name": $("#name").val(),
  "applicant": $("#applicant").val(),
  "start_date": $("#start_date").val(),
  "end_date": $("#end_date").val(),
  "products": []
}

$("#products").children(".dropdown").each(function(key, value) {
  bidding.products.push(
    {
    "product_name": $(value).children(".btn").text(),
    "quantity": $(value).children("input").val()
    }
  );
});

当我执行console.log(JSON.stringfy(bidding))时,它会按预期解析,例如:

{
  "name":"Material de Construção",
  "applicant":"Prefeitura",
  "start_date":"26/09/2017",
  "end_date":"01/10/2017",
  "products":[
    {"product_name":"Cimento (5kg)","quantity":"200"},
    {"product_name":"Tijolo","quantity":"100"},
    {"product_name":"Caneta","quantity":"5"}
  ]
}

但是当我使用$.post("/api", bidding);发布它时,我的API就会收到它:

{
  name: 'Material de Construção',
  applicant: 'Prefeitura',
  start_date: '26/09/2017',
  end_date: '01/10/2017',
  'products[0][product_name]': 'Cimento (5kg)',
  'products[0][quantity]': '200',
  'products[1][product_name]': 'Tijolo',
  'products[1][quantity]': '100',
  'products[2][product_name]': 'Caneta',
  'products[2][quantity]': '5'
}

我怎样才能使jQuery停止为数组中的每个条目创建新属性,而是将整个数组作为单个属性发送?

2 个答案:

答案 0 :(得分:2)

您需要设置为false:

  

processData:默认情况下,作为对象传入数据选项的数据(技术上,除了字符串之外的任何东西)将被处理并转换为查询字符串,适合默认的内容类型&# 34;应用程序/ x-WWW窗体-urlencoded&#34 ;.如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。

因此,您的帖子将是:

$.ajax({
    type: "POST",
    url: "/api",
    data: JSON.stringify(bidding),
    processData: false,
    contentType: "application/json",
    dataType:"json",
    success: function () {
    }
});

答案 1 :(得分:1)

$.post("/api", JSON.stringify(bidding));

在服务器端解码json。如果您使用php,请使用json_decode

使用json始终是保存数据结构的好主意