此Meteor服务器代码使用HTTP 1.1.7发出POST请求以匹配我使用java所做的操作,但我无法弄清楚如何在具有相同密钥的请求参数中包含多个条目。
//in java 'working'
HttpParams javaParams = new HttpParams();
javaParams.add('food','milk')
javaParams.add('food', 'water')
javaParams.add('food', 'ice')
javaParams.encodeParameters("UTF-8");
//in javascript 'not working'
let headerObject {
"Content-Type" : "application/x-www-form-urlencoded",
'Accept-Language': 'en-US,en;q=0.5'
and others
}
const response = HTTP.call('POST', myUrl, {
timeout: 30000,
headers: headerObject,
params: {
'food': 'milk',
'food': 'water',
'food': 'ice'
}
});
//also tried these but server returned status code 500
food: ['milk', 'water', 'ice']
'food[]': ['milk', 'water', 'ice']
怎么做到这一点?感谢
答案 0 :(得分:0)
在JavaScript中,只需使用数组:
const response = HTTP.call('POST', myUrl, {
timeout: 30000,
headers: headerObject,
params: {
food: ['milk', 'water', 'ice']
}
});
但是,服务器端的不同语言使用不同的机制来处理参数数组。虽然Java应该使用上面的代码,但PHP例如需要参数名称包含方括号,因此调用需要
const response = HTTP.call('POST', myUrl, {
timeout: 30000,
headers: headerObject,
params: {
'food[]': ['milk', 'water', 'ice']
}
});
在当前情况下,服务器端似乎期望请求内容的单独行中的每个条目作为键=值对,每个键是“食物”。遗憾的是,这不能用JavaScript数组或JavaScript对象完成。
为避免此问题,我们使用data
代替params
。这可以防止HTTP.call()从给定的data
创建params
。它只需要我们自己处理参数的连接:
const response = HTTP.call('POST', myUrl, {
timeout: 30000,
headers: headerObject,
data: "food=milk\nfood=water\nfood=ice"
});