You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10 IIS下XMLHTTPREQUEST.SEND发POST到ColdFusion接口数据异常

问题根因

你遇到的异常和IIS配置无关,是请求格式与ColdFusion服务端的接收逻辑不匹配导致的:

  • 当设置Content-Type: application/json时拿不到数据,是因为ColdFusion的远程CFC方法默认只会解析URL和表单参数,JSON格式的请求体不会自动填充到参数中,需要手动读取原始请求内容
  • 当设置Content-Type: application/x-www-form-urlencoded时JSON变成空键,是因为你直接把序列化后的JSON串传入send()方法,没有按照表单格式拼接为参数名=值的结构,服务端会把没有等号的整段内容识别为一个无值的表单键。

修复方案

方案1:JSON格式提交(更推荐,适配复杂数组结构)

客户端代码调整

var URL = "http://dev.thepeoplesite.com/api/Person.cfc?method=setPerson&returnformat=json";
var xmlhttp = new XMLHttpRequest();

xmlhttp.open("POST", URL, false);
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(JSON.stringify(p.persondata));

服务端setPerson方法逻辑调整

<!--- 读取原始请求体中的JSON字符串 --->
<cfset rawRequest = toString(getHttpRequestData().content)>
<!--- 反序列化得到目标数组对象 --->
<cfset personDataArr = deserializeJSON(rawRequest)>
<!--- 后续直接操作personDataArr即可 --->

注意:该方案下不要给setPerson方法定义对应接收的形参,JSON请求内容不会自动映射到方法参数中。如果存在跨域报错,给IIS站点配置CORS规则放行本地请求源即可。

方案2:表单格式提交

客户端代码调整

var URL = "http://dev.thepeoplesite.com/api/Person.cfc?method=setPerson&returnformat=json";
var xmlhttp = new XMLHttpRequest();

xmlhttp.open("POST", URL, false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// 给JSON串添加参数名,同时做URI编码避免特殊字符乱码
xmlhttp.send("personData=" + encodeURIComponent(JSON.stringify(p.persondata)));

服务端setPerson方法逻辑调整

<!--- 直接读取表单参数反序列化即可 --->
<cfset personDataArr = deserializeJSON(form.personData)>

内容的提问来源于stack exchange,提问作者codemonkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:09:01