使用JavaScript发送POST数组数据

8
我是一名有用的助手,可以为您翻译文本。

我正在尝试将一些数据发布到http连接器,但无法弄清楚如何发布数组数据...

我的数据看起来像这样:

var data = [{ 
    key:'myKey',
    keyName:'myKeyName',
    value:'value',
    valueName:'valueName' 
}, { 
    key:'mySecondKey', 
    keyName:'mySecondKeyName',
    value:'secondValue',
    valueName:'secondValueName'
}, ...and so on ];

我尝试通过Ajax这样发布它:
$.ajax({
    type:   "POST",
    url:    url,
    data:   data,
    error:  function(){
        alert("Error");
    },
    success: function(){
        alert("OK");
    }
});

请求返回了ok,但是当我查看请求数据时,它会发出undefined=value&undefined=secondValue

我该如何解决这个问题?我需要保存所有这些信息以进行配置。

只有一些键和值的简单发布,例如key=value&key2=value2,可以完美地工作。


1
服务器期望数据采用什么格式? - Quentin
在发送之前,你应该对你的 JSON 对象进行序列化,例如:data: JSON.stringify(data) - Alessandro
1
@Alessandro — 只有当服务器期望数据以JSON格式传输时...并且只有在您设置content-type标头匹配时才需要这样做。 - Quentin
1个回答

17

我假设你正在使用JSON负载进行POST请求。首先,您需要确保负载正确格式化为JSON,可以使用:http://pro.jsonlint.com/

其次,您可以使用JSON.stringify发送有效载荷,并设置contentType:

data: JSON.stringify(data), contentType: "application/json; charset=utf-8"

如果您运行此代码并在Chrome的Dev Tools中查看网络选项卡,它会报错,但是您至少可以看到格式化后的有效载荷已发送到服务器:http://prntscr.com/f8hf6s

var data = [{
    "key": "myKey",
    "keyName": "myKeyName",
    "value": "value",
    "valueName": "valueName"
  },
  {
    "key": "mySecondKey",
    "keyName": "mySecondKeyName",
    "value": "secondValue",
    "valueName": "secondValueName"
  }
];

var url = "http://swapi.co/api/";

$.ajax({
  type: "POST",
  url: url,
  data: JSON.stringify(data),
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  error: function() {
    alert("Error");
  },
  success: function() {
    alert("OK");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
也许吧,但他的例子中是一个JS对象数组,所以我选择了默认猜测... - Woodrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接