2017-07-26 65 views
1

虽然我知道fetch()请求可以具有“headers:”,“body:”等形式的参数,但我在fetch() POST调用时遇到了问题一个ColdFusion组件的远程功能。 我取通话:通过CfHttp获取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需要RequestBody与JSON)。当我运行这段代码,我告诉我的CFC日志:

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

当我从CREATEOBJ功能删除参数,则取呼叫失败,有人告诉我:

“变量MyObj中是不确定的。”

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

+0

如果你包围了这个,{{method:“POST”,body:jsonVar}',用括号括住了这个逗号。 –

+0

@DanBracuk恐怕我不太理解这个建议;将括号括起来括括号?逗号也必须在那里,否则我会得到一个错误。 –

+0

我不会为这个或任何东西使用提取。 IE不支持提取,因此您的网站不能跨浏览器。 –

回答

2

您传递的数据为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)); 
    } 
}