【发布时间】:2019-08-17 19:31:03
【问题描述】:
我正在尝试向 REST API 发送请求,并且我使用 Javascript 来准备和发送它。但是,当我使用 JSON.Stringify 写出对象所需的变量时,API 说我缺少必填字段。
我尝试将对象写入字符串,然后将其包含在代码中,并且我尝试将 JSON.Stringify 添加到代码中。没有任何效果。
我从发布的字段中构建了一个数组“数据”,格式如下:
var Data = {};
var fields;
var fieldName;
var fieldValue;
var fieldValueCleaned;
var emailCleaned;
var stingForJson;
stingForJson = "";
for(var i = 0; i < types.length; i++){
fields = types[i].split("=");
fieldName = fields[0];
fieldValue = CleanupInj(fields[1]);
fieldValue = decodeURIComponent(fieldValue);
fieldValueCleaned = CleanUp(fieldValue);
Data[fieldName] = fieldValueCleaned;
console.log( fieldName +" : "+ fieldValueCleaned);
}
如果我将 JSON.stringify({Data}) 写入控制台,它就正确了:
{
Data: {
"Field1": "123562374563",
"Field2": "https://giphy.com/gifs/borat-great-success-a0h7sAqON67nO/fullscreen",
"Field3": "https://giphy.com/gifs/haZOqHKz9tTfW/fullscreen",
"Field4": "My@email.com",
"Field5": "Thisisme"
}
}
但是,当我将变量添加到代码中以执行请求时,它不起作用(如下所示)
fetch('https://MYAPIURL/v1/events', {
method: "POST",
cache: "no-cache",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " : "12321321321321",
},
body: JSON.stringify({
"Field1": Data.Field1,
"Field5": Data.Field5,
}),
Data: JSON.stringify({Data}),
}
)
.then(function(res) {
return res.json();
}).then(function(json) {
callback(null, json);
});
它不起作用,因为 Data 中的值没有发送到服务器。
我什至尝试将对象写入字符串,然后使用 JSON.stringify 将其放回 json 对象:
stingForJson = JSON.stringify({Data});
stingForJson = stingForJson.slice(9,-2);
console.log("String for JSON = "+ stingForJson);
fetch('https://mc-hz56jzqd8k6ldx1sm7-s7xfbm.rest.marketingcloudapis.com/interaction/v1/events', {
method: "POST",
cache: "no-cache",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + accessToken,
},
body: JSON.stringify({
"ContactKey": Data.EmailAddress,
"EventDefinitionKey": Data.EventDefinitionKey,
Data:{stingForJson}
}),
【问题讨论】:
-
JSON.stringify({Data}) 写成 { Data: { "Field1": "123562374563", "Field2": "giphy.com/gifs/borat-great-success-a0h7sAqON67nO/fullscreen", "Field3": "giphy.com/gifs/haZOqHKz9tTfW/fullscreen" , "Field4": "My@email.com", "Field5": "Thisisme" } } 当我把它写到控制台时
-
究竟是什么“不起作用”?你有错误吗?
-
发送请求时不需要使用 stringify。按原样发送 json 对象,通过线路将其编码。您正在将其转换为字符串然后发送它,这就是为什么服务器没有收到所需的 json 对象。
-
fetch忽略您在对象上设置的Data属性(see the MDN documentation 用于接受的属性列表)。换句话说,Data的值不会发送到服务器。您的意思是将其作为body的一部分发送吗?还是您的意思是改为写body: JSON.stringify(Data)? -
您的第二个示例应该是:
body: JSON.stringify({ "ContactKey": Data.EmailAddress, "EventDefinitionKey": Data.EventDefinitionKey, Data})。{Data:{stingForJson}}会创建一个看起来像{Data: {stringForJSON: "\"foo\": 42"}}的对象,这很可能是错误的。
标签: javascript json rest zapier stringify