使用CfHttp在Fetch POST和ColdFusion函数之间进行通信

时间:2017-07-26 16:52:52

标签: coldfusion fetch-api

虽然我理解fetch()请求可以有“headers:”,“body:”等形式的参数,但我遇到了fetch() POST调用问题。 ColdFusion组件远程功能。 我的提取电话是:

fetch('myComponent.cfc?method=createObj', {method: "POST", body: jsonVar }) 
   .then(function (getCreateResponse) {
       //do great things
})
.catch(function err) {
alert("Fetch error: " + err);
});

我的cfc功能如下:

   remote array function createObj(required any myObj) returnFormat = "JSON" {
           cfhttp(url="http://myServer/ObjAPI/Obj", method="POST", result="getResponse") {
            cfhttpparam(type="header", name="Content-Type", value="application/json");
            cfhttpparam(type="body", value=SerializeJSON(myObj));
        } }

(此POST使用带有JSON的RequestBody。)当我运行此代码时,我在CFC日志中被告知:

  

“createObj函数的MYOBJ参数是必需的,但未传入。”

当我从createObj函数中删除参数时,fetch调用失败,我被告知:

  

“变量MYOBJ未定义。”

在我看来,CF函数需要一个参数才能知道它应该在cfhttp调用中发送什么;但是,它没有识别fetch调用发送的“body:jsonVar”参数。是否有另一种方法来发送CF函数可以理解的参数?

1 个答案:

答案 0 :(得分:3)

您将数据作为body数据传递。你可以看到如下的json数据

remote array function createObj() returnFormat = "JSON" {
     WriteDump(deserializeJSON(ToString(getHTTPRequestData().content)));
     myObj =  deserializeJSON(ToString(getHTTPRequestData().content));
     cfhttp(url="http://myServer/ObjAPI/Obj", method="POST", result="getResponse") {
         cfhttpparam(type="header", name="Content-Type", value="application/json");
         cfhttpparam(type="body", value=SerializeJSON(myObj));
     } 
}